合并Git中的冲突案例

时间:2013-02-06 14:58:39

标签: git

我刚刚开始使用Git和之前使用的CVS进行版本控制。

有人可以解释我如何处理Git中的合并冲突案件吗?在这种情况下,遵循的标准程序是什么。

我在完成以下步骤后面临一种情况,

  1. 我使用git addgit commit
  2. 将一些文件提交到我的本地存储库
  3. 稍后,当我尝试将本地repo更改推送到远程仓库时,它会因非快进错误而失败,并在推送之前提示我拉。
  4. 所以我尝试git pull从远程仓库获取最新信息到我的本地仓库。拉失败并说有合并冲突。
  5. 让我们假设我从遥控器拉到我的本地仓库,然后执行第1步(提交文件)。如果其他人在我推送到远程仓库之前推送他们的更改会发生什么。我相信以合并结束的推动是一种常见的情况。如何处理这些案件?

    我认为pull涉及fetch + merge。在我的情况下,自动合并似乎失败了。在上述情况下我该怎么办?还请告诉我如何避免陷入这种情况?

2 个答案:

答案 0 :(得分:3)

当你有冲突的文件时,git会在每个冲突的文件中插入冲突标记。冲突标记包含来自两个分支的代码,如下所示:

 <<<<<<<<< LOCAL_BRANCH_NAME
 local code goes here
 ==========
 merge branch code goes here
 >>>>>>> MERGE_SHA

当您执行git状态时,您会看到这些文件的状态为“已修改”,这些文件存在冲突。从技术上讲,解决这些问题需要做的就是git add file,但很明显,如果那是所有,那么你的代码就会搞砸了。

解决冲突的最简单方法是使用git mergetool。当文件冲突时运行git mergetool并且git将询问您要使用哪个合并工具,它支持一个长列表我的首选工具是kdiff3。 git然后会引导您浏览每个冲突的文件,如果您的工具支持它,则使用3方式差异(强烈建议,它会使事情变得更容易)。

作为评论中未收集的建议,在您开始时阅读git book是必须的。

答案 1 :(得分:1)

以下是我如何进行git提交的快速列表:

  1. git clone <repository url>
  2. 进行更改
  3. git stash:这会将您未提交的更改存储在临时缓存中(并暂时将其从工作目录中删除,因此您可以获得干净的副本)
  4. git pull获取最新的存储库版本
  5. git stash pop将隐藏的更改应用于本地存储库(并将其从存储中删除);这可能会产生冲突,就像合并或变种一样
  6. 修复任何冲突
  7. git add <changed files>
  8. git commit,使用-m提供短信或将其留空以打开编辑
  9. git push将您的更改发布到远程
  10. 他们可以避免你遇到的问题是在拉动之前隐藏你的更改,然后在拉完后弹出存储。