【Git】git遇到的问题收录

1. git pull更新出问题

当遇到如下错误时,一般都是git pull出问题了。
在这里插入图片描述
可以使用如下命令解决:

git gc --prune=now  //清理优化本地的 git 项目存储库
git pull

若还是报错,则多循环操作几次。

2. repo子模块多,代码量大,更新不完全

若项目仓库repo代码量太大,里面包含很多子模块。每次 (git checkout 分支名)切换分支后,直接git pull可能会更新不全。可以用下面命令确保每次都能把所有模块的代码更新到最新。

git submodule sync --recursive
git submodule update --init --recursive --force
git submodule foreach --recursive git reset --hard HEAD
git submodule foreach --recursive git clean -xffd 
最后再git pull一下。

一般出现如下所示 Already up to date. 即代码更新到最新了。
在这里插入图片描述

3. 本地修改代码,远程有更新,或临时换任务切换到其他分支开发

(1)在多人协作开发时,经常碰到同事把最新修改推送到远程库,你在本地也做了修改,这个时候无论是执行git pull还是执行git push都会提示错误

我的解决方式如下:

【1】先隐藏掉本地的修改,然后执行git pull从代码块拉取最新代码,具体步骤如下:

		1.输入 git status 查看本地的修改
	
		2.输入git stash 隐藏掉本地修改
	
		3.输入 git pull 从代码库拉取更新
	
		4.输入 git stash pop stash@{版本号}
	
		5.然后再git add git commit git push 就行了
		
【2】还有一种是 放弃本地修改 的改法  ----这种方法会丢弃本地修改的代码,而且不可找回
		git reset --hard
		git pull

git stash相关指令补充:

  • git stash list:查看本地已有的stash版本;
  • git stash save “xxx”:加上自己的注解进行缓存;
  • git stash apply:与pop相似,但他不会在堆栈中删除这条缓存,适合在多个分支中进行缓存应用也可以进行指定git stash apply stash@{0};
  • git stash drop/git stash clear:git stash drop [名] 删除单个缓存,举例git stash drop stash@{0};git stash clear全清;
  • git stash show:git stash show [名] 显示与当前分支差异,举例git stash show stash@{0} ,加上-p可以看详细差异;

(2)另外,还有一种情况,因为自己粗心,在git push之前并没有看代码库的提交记录,导致同事做了修改我不知道,但是我已经执行了git add 和 git commit 这个时候怎么撤销掉git commit 呢?

我采用的解决方式如下:

		1.先复制你本地的项目到另外一个文件夹
		
		2.输入 git log 查看commit日志,找到最新的提交的commit_id
		
		3.输入git reset - -hard commit_id
		
		4.再把刚才的项目复制过来
		
		5.执行 上面的2 3 4  5步骤就可以了

(3)另外需要注意的问题,当我们git pull 时发现本地的修改和远程代码库的修改有冲突,该怎么解决呢?
在这里插入图片描述

这个时候,我们可以根据提示来找到冲突的位置,其中Updated upstream 和=====之间的内容就是pull下来的内容====和stashedchanges之间的内容就是本地修改的内容,需要我们手动进行确认需要怎么合并.

4. 当某个文件改的面目全非,想还原到远程repo上一样

(1)要修改的文件未添加到暂存区:

就是文件处于untracked状态:

git checkout -- xx/xx/xx.cpp[具体文件路径]    //将某个文件复原

(2)要修改的文件已经添加到暂存区:

就是git add .过了,我们需要做如下操作:

  1. 先把文件恢复到未跟踪状态:
git reset head [filepath]    //单个文件
git reset head .    //所有文件
  1. 撤销文件修改:
git checkout -- [filepath]//单个文件
git checkout .//所有文件

这样文件就回到了未修改状态。

5. 本地开发中,copy了一份代码repo,切换到新分支时,遇到如下报错

参考链接

error: pathspec 'XXX新分支名' did not match any file(s) known to git

可以这样解决:

  1. 首先看下所有分支 是否有新分支
git branch -a
  1. 如果没看到,那么执行以下操作,这步是获取所有分支
git fetch

执行完会看到如下提示:

remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
Unpacking objects: 100% (4/4), 1.06 KiB | 90.00 KiB/s, done.
From codeup.aliyun.com:5eeb0689892c58bb7c394ab5/pxb/pxb-fronted
 * [new branch]      XXX新分支名 -> origin/XXX新分支名

这时再 git checkout 新分支名 即可。

6. 进行 git cherry-pick commit号 操作时,遇到如下报错:

在这里插入图片描述
解决git cherry-pick xxx fatal: bad object xxx
我的情况是在B分支的同步A分支的一个commit,出现了如标题的错误。我是直接在web上看到A分支新提交的这个commit,然后我直接在本地的B分支中进行git cherry-pick xxx,就出现了这个问题。经过尝试 问题是出在了我没有切到B分支pull一下。git pull后即可顺利执行。
总结过来就是git cherry-pick是本地特性,本地要有这个commit才可以被git cherry-pick。
具体git cherry-pick用法可参考 blog

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值