0

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

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

执行以下步骤后,我遇到了一种情况,

  1. git add我已经使用和提交了一些文件到我的本地存储库中git commit
  2. 后来,当我尝试将本地 repo 更改推送到远程 repo 时,它会因非快进错误而失败,并提示我在推送前拉取。
  3. 所以我试图git pull从远程仓库中获取最新的信息到我的本地仓库中。拉失败,说有合并冲突。

假设我从远程拉入本地仓库,然后执行第 1 步(提交文件)。如果其他人在我推送到远程仓库之前推送了他们的更改会发生什么。我相信以合并结尾的推送是一种常见的情况。如何处理这些情况?

我假设拉涉及获取+合并。就我而言,自动合并似乎失败了。在上述情况下我该怎么办?还请告诉我如何避免陷入这种情况?

4

2 回答 2

3

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

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

当您执行 git status 时,您会看到这些文件的状态为“都已修改”,这些文件是冲突的。从技术上讲,解决这些问题所需要做的就是 do git add file,但显然如果这就是你所做的一切,你的代码就会被搞砸。

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

正如评论中未收集的建议,当你开始时,阅读git 书是必须的。

于 2013-02-06T15:15:28.260 回答
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将您的更改发布到远程

他们避免您遇到的问题的方法是在拉取之前存储您的更改,然后在拉取完成后弹出存储。

于 2013-02-06T15:02:45.253 回答