Git学习笔记5 merge冲突时二选一

从Git版本1.6.1开始,有--ours和--the选项,用于仅保留具有合并冲突的文件的本地或远程版本。

git checkout --ours <file_name>
git checkout --theirs <file_name>

常常有这样一种情况,程序员甲在Git branch了一个项目,然后花了1个月在 branch 中开发了几个功能,解决了一些bug,最后一步必然是把这个branch merge回master,然后解决冲突,再进行交给QA前的最后调试。解决冲突是个很痛苦的过程,如果高效解决 merge conflict 是所有版本控制系统花大力气的地方之一,这里就不赘述,只介绍如何在merge 冲突时使用 Git 命令简单地在发生冲突的两个文件版本中进行二选一。

 

假设原来有文件A,程序员甲把A进行了完全的重写,而甲在自己的branch工作的同时,他的同事程序员乙则对A进行了一个优化。这样,当甲想要merge的时候,A文件就有很多的冲突,可能多达几百行。

 

$ git merge master

   Auto-merged xxx/A.java

   CONFLICT (content) : Merge conflict in xxx/A.java

   Automatic merge failed; fix conflicts and then commit the result.

 

这时候两个程序员达成一致,最后应该完全采用甲的版本,因为乙只是在原基础上优化,而甲进行了全方面的重写。在这种情况下,git checkout 命令的   - -theirs 和 - -ours 就派上用场了。前者表示保留甲 想要merge的版本,后者表示保留master branch中的版本,即乙的版本。

 

$ git checkout - -ours xxx/A.java // 抛弃甲的版本,保留乙的

$ git checkout - -theirs xxx/A.java // 抛弃乙的版本,完全采用甲的

 

这两个参数只适用于 Git 1.6.1及更新的版本。

在1.6.1 以前版本中,虽然没有这两个参数,但也有办法

1、实现 - - theirs

$ git reset - - xxx/A.java

$ git checkout MERGE_HEAD - - xxx/A.java

2、实现 - - ours

$ git reset - - xxx/A.java

$ git checkout ORIG_HEAD - - xxx/A.java

参考文献:

https://blog.csdn.net/qinjienj/article/details/7816047

https://coderwall.com/p/gpjmnq/choose-local-or-remote-version-in-a-merge-conflict

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
git merge 冲突是指在执行git merge命令,发现两个分支之间存在冲突的情况。冲突的原因可能是两个分支在同一处修改了相同的文件或者代码段,导致无法自动合并。在这种情况下,Git需要手动解决冲突。 解决git merge冲突的方法有多种,以下是两种常见的解决方案: 1. 手动解决冲突:在执行git merge后,如果出现冲突Git会将冲突的文件标记出来。你可以使用文本编辑器打开这些文件,并查看冲突的地方。冲突的部分会被包含在一对特殊标记(如<<<<<<< HEAD、=======和>>>>>>>)之间。你需要根据需要,手动修改这些部分,将冲突解决掉。然后保存文件,再执行git add和git commit命令完成解决冲突的过程。 2. 使用git pull命令解决冲突:你可以使用一条简单的命令来解决冲突。首先,执行以下两条命令: git config pull.ff false git pull 这两条命令的作用是禁用fast-forward合并,并拉取最新的代码。如果在此过程中出现冲突Git会自动将冲突的文件标记出来。然后你可以编辑这些文件,解决冲突,并执行git add和git commit命令来完成解决冲突的过程。 需要注意的是,git merge命令在两个分支合并可能会出现冲突。而git pull命令实际上是git fetch和git merge命令的组合,用于将另一个代码仓库中的变化合并到当前分支中。因此,在使用git pull命令,也可能会遇到冲突的情况。 总结起来,解决git merge冲突的方法可以是手动解决冲突,也可以使用git pull命令解决冲突。具体的解决方法取决于个人偏好和具体情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Git merge 出现冲突的根源,如何解决各种类型的冲突](https://blog.csdn.net/weixin_44757863/article/details/121618060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值