2013-02-06 242 views
0

我刚刚开始使用Git和先前使用的CVS进行版本控制。在Git中合并冲突案例

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

我面临的情况做下面的步骤后,

  1. 我犯了一些文件到我的本地库使用git addgit commit
  2. ,当我试图把我的本地回购更改远程回购以后,它在非快进错误上失败,并在推送前提示我拉。
  3. 所以我试着git pull从远程回购获取最新到我本地回购。拉失败并说有合并冲突。

让我们假设我从远程进入我的本地回购,然后执行步骤1(提交文件)。如果其他人在推送到远程回购之前推送了更改,会发生什么情况。我相信通过合并推动结束是一种常见的情况。如何处理这些案件?

我假定拉涉及获取+合并。在我的情况下,自动合并似乎失败了。在上述情况下我需要做些什么?还请告诉我如何避免陷入这种情况?

+2

这是值得检查[Git Book](http://git-scm.com/book)作为第一停靠港。它有一个非常好的[章节](http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging#),它涵盖了合并。 –

+0

@uncollected,谢谢你的信息。当然,我需要一些指导。 – Prabu

回答

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发布的更改远程

他们的方式,以避免你打的问题是拉前藏匿更改,然后弹出藏匿拉完成后。

+2

你正在做的事情实际上是一个'git pull --rebase',而不是首先提交(并使用更多命令) –

+0

@ hotSauce.Open,感谢您分享您的经验。由于我是这个GIT的新手,我并不那么意识到存储。我会通过它。你的回答非常有帮助。同时请告诉我,如果我遇到我的情况中解释的情况,我该怎么办? – Prabu

+0

正如Nevik上面所说,有一种更直接的方式来做我所做的而不是存储,只需使用git pull --rebase。在目前的情况下,做一个git存储,git pull,然后git存储流行。 – pwnyexpress

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是必须的。