Git 笔记 —— (五)、解决冲突

协作开发必然会遇到冲突的情况(仓库上版本与本地版本不一致),导致合并(merge)、提交(commit)、推送(push)失败,所以学会解决冲突尤为重要。

目录:

一、冲突说明

二、命令方式实践

三、TortoiseGit 工具相关功能简介


一、冲突说明

如下场景。本地代码为在仓库版本为E 时克隆至本地的,之后仓库上代码与本地版代码有提交,导致仓库上代码最新版本为C,而本地的最新版本为G。

此时,若直接拉取(pull,相当于fetch + merge),Git 会提示:error:...would be overwriten by merge.

pull 失败后,本地代码的状态是不会改变的,即并未合并。为了能合并最新仓库代码,有两种方式:

(一)、先将本地代码的所有改变另存后还原到E 版本,之后再执行pull 命令;

(二)、将本地代码的改变贮藏(git stash),即另存,这时本地代码也会回到E 版本。

之后拉取合并成功后,再将本地代码先前的改变应用上去即可。对于方式一,可手动修改,对方式二,执行git stash pop 或git stash apply 命令。之后再整理冲突,完成后提交并推送。

最终,合并的结果如图:


二、命令方式实践

仍然是上一笔记的项目,为了模拟协作开发,首先直接在码云上将文件进行编辑,使其版本高于本地上一次合并时的版本。

之后,修改本地的该文件内容为:本地添加的内容

之后,文字描述实践步骤为:

1、提交前拉取:

git pull origin HEAD

结果:提示:error:Your local changes to the following files would by overwriten by merge.

因为pull 相当于fetch + merge,fetch 成功,但merge 失败,本地文件不变。

2、采用stash 命令,将本地改变贮藏:

git stash

git stash list

git stash list 只是查看贮藏的文件列表。

随后,可git status 看下本地项目状态,发现未提示任何变化,保持与“版本E”完全一致。

3、重新拉取

git pull origin HEAD

结果:成功,更新到了仓库的最新版本。

对应此演示项目,myFile.txt文件内容变为:


4、将本地变化应用到仓库最新版本上,即使用贮藏的文件

git stash apply/pop

区别:apply 仅应用贮藏文件(貌似可以多次应用),不会将其从贮藏列表移除,而pop 会移除贮藏列表。

结果:合并成功。myFile.txt内容变为:


5、解决冲突

应用贮藏文件后的文件为最新文件,根据需要修改文件内容。此处不做修改。

6、使文件变为staged 状态(git add),以便commit 时该文件能使版本更新

git add myFile.txt

7、提交

git commit -m "注释"

8、推送到远端,此处即码云上


9、查看码云上项目,结果推送成功。


三、TortoiseGit 贮藏功能简介






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值