2012-08-24 200 views
1

Master HEAD有一些变化,我试图将我当前的本地变更与头部合并。
假设我有冲突的变化。 git只是拒绝pull将当前分支合并到HEAD

它说我有冲突的更改,所以在这种情况下,我希望它告诉我,有冲突的文件,但它希望我恢复我的本地更改,然后拉

 Master 
    / \ 
    branch1 branch2 (local) 
     \ 
    Master 

当BRANCH2尝试提交主设备的更改失败。在这种情况下我该怎么办?手动将文件复制到某个位置,然后使用winmerge合并文件?还是有更好的方法来合并?

当我做一个git pull时,它声明 - 本地更改将被覆盖,因此在提取之前隐藏或提交更改。

当我I stashcommit更改,然后pullstash pop失败,说明工作副本中的更改将被覆盖。

顺便说一句,我从来没有在任何一种情况下都看到有冲突的文件,即使我尝试了变形。

+0

无论你做什么,都不要仅仅手动复制文件;你会失去你的历史! – WhyNotHugo

+0

我没有看到'git merge';你尝试过使用它吗?我建议你也先阅读:http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging – WhyNotHugo

+0

向我们展示失败的'git pull'命令的完整输出 – Gareth

回答

0

看起来像使用GIT的最佳方式是有分支机构。

分支1
GIT提交
GIT PUSH
GIT MERGE主(以提取新的变化)

分支2
GIT提交
GIT PUSH


GIT合并分支1
GIT合并分支2

我不认为有任何其他方式。如果我错了,请纠正我?

这是正确的,如果是的话,在这种情况下使用分支机构是光滑的!

2

此问题的答案在文档中以普通视图隐藏。从git help merge


如何解决冲突

看到冲突后,你可以做两件事情:

  • 决定不合并。您需要的唯一清理操作是将索引文件重置为HEAD提交以反转2.并清除由2和3制作的工作树更改 。 git merge --abort可用于此。

  • 解决冲突。 Git将标记工作树中的冲突。将这些文件编辑为索引,并将其转换为索引。使用git commit来密封 这笔交易。

您可以通过使用一些工具冲突工作:

  • 使用合并工具。 git mergetool来启动一个图形化的合并工具,它可以帮助你完成合并。

  • 看看差异。 git diff将显示三向差异,突出显示HEAD和MERGE_HEAD版本的变化。

  • 看看每个分支的差异。 git log --merge -p <path>将首先显示HEAD版本和MERGE_HEAD版本的差异。

  • 看看原件。 git show :1:filename显示共同的祖先,git show :2:filename显示HEAD版本,git show :3:filename显示 MERGE_HEAD版本。

+0

我没有看到标记的冲突。这就是我想看到的。相反,GIT PULL刚刚出来。这是否意味着GIT合并是必需的? –

+0

标记的冲突在冲突的文件中。编辑问题并包含失败的'git pull'命令的输出 – Gareth

+0

另外,请参阅'git status'来查看您的工作副本和索引的状态,以及索引 – Gareth

相关问题