2009-05-02 133 views
44

一位同事和我现在都在主分支上工作。我在我的工作树中有一些我不想提交的代码(调试语句等)。现在,如果他提交更改一些这些相同的文件,我无法将它们合并:如何让git合并处理我的工作树的未提交更改?

$ git merge origin/master 
Updating 1b8c5c6..eb44c23 
error: Entry 'blah.java' not uptodate. Cannot merge. 

从颠覆背景的,我已经习惯了有我的工作树自动合并时,我拉从库中的变化如果有冲突,我会手动解决它们。

我发现这样做在Git中的最快方法是:

$ git stash 
$ git merge origin/master 
$ git stash pop 

从本质上讲,我消除了未提交的修改,执行合并,然后再应用更改。我怎么能告诉合并自动合并我的工作树与我试图拉入的变化?

+3

如果你有合并冲突怎么办?如果您将在脏文件(您修改的文件)中合并冲突,会怎么样? 另请参阅Junio C Hamano(git维护者)博客中的“保持本地变化的乐趣”:http://gitster.livejournal.com/29060.html – 2009-05-02 18:01:39

+0

感谢您的链接。尽管如此,绝大多数时候,我希望没有任何冲突或者很小的,我不介意用手工修复。无论如何,如果我犯了我的肮脏文件,我会面临相同的冲突风险,除非我必须承担之后不承担责任的麻烦。 – 2009-05-02 18:28:11

+0

相关问题:http://stackoverflow.com/questions/18529206/when-do-i-need-to-do-git-pull-before-or-after-git-add-git-commit – leo9r 2016-04-11 23:07:43

回答

18

据我所知,你所能做的最好的就是你已经拥有的git stash。我也感到奇怪的是,合并只想处理干净的树木。

36

忘掉你从颠覆中学到的一切。

在引入外部更改之前始终提交。

想象一下,你有一个大多数工作树 - 可能不完美,但你正在取得一些进展。然后,你去做一个合并,你带来的代码只是造成了破坏(本身就是越野车,需要处理太多冲突等等)。如果你能解决这个问题,不是很好吗?

如果你犯了,你可以。如果你不这样做,你就会受苦。

请记住:你承诺的不是是你推动的,但你不承诺的东西很容易失去。

只是做安全和容易的事情,提前做出承诺并经常做。

2

您不能告诉git merge合并对本地存储库发生更改的文件所做的更改。这样可以防止合并过程中出现严重错误时的变更。

使用CVS和SVN方法进行合并,如果在更新之前没有手动复制文件,并且在合并时对它们进行了加扰,则必须手动重新编辑才能恢复到良好状态。

如果您在进行合并之前提交更改或隐藏它们,则所有内容都是可逆的。如果合并不顺利,您可以尝试多种方式使其合并,并使用效果最好的方法。

如果您确实提交了实验性或调试性更改,您可以使用git rebase在您通过git merge获得提交后移动它们,以便更容易摆脱它们或避免意外将它们推送到存储库。

请注意,在推送到共享存储库的分支上使用git rebase会导致从该存储库中提取的所有人都感到悲伤。

在这些情况下,我更喜欢使用git stash,但是如果合并更改了我已编辑但未提交的文件,我只会使用它。