2013-07-03 55 views
5

假设进出口工作的一个特点,在一个名为foo_baz分支。Squash在主控上提交,但在功能分支上单独提交?

我犯多次为我实现这个特性。

我周期性推foo_baz,远程跟踪分支,到远程回购。 IE origin/foo_baz

我进展到了我想要将foo_baz的所有提交合并到master并推送到origin/master的点。这里的问题:

我可以将其合并到foo_baz这样master所有提交仍在foo_baz分开的histroy,但在master的历史,他们都是一个,压扁承诺?

编辑:

我有点混帐初学者,所以请原谅我,如果有什么东西完全明显,我失踪。我在网上搜索,但无法找到我的问题的直接答案。

回答

5

您可能确实在寻找--squash(与其他答案一样),但您也许正在寻找--no-ff

以下是两者之间的区别。假设你开始两次提交:

A --- B    <-- branch "master", when you start 

,然后让两个对你的新分支foo_baz

A --- B    <-- master 
     \ 
      C --- D  <-- foo_baz 

现在(一度重上master),你有这两个选项(等等)。您可以git merge --squash foo_baz && git commit,这将给你如下:

A --- B ----------- E <-- master 
     \ 
      C --- D  <-- foo_baz 

,或者你可以git merge --no-ff

A --- B ----------- E <-- "master" after merge --no-ff 
     \  /
      C --- D  <-- foo_baz 

两个给你一个新的提交E - 在第一种情况下,从单独的git commit命令,但第一个压制多父母行为,所以最后,当你从现在开始回顾这一年时,看起来你只是复制了分支中的所有更改。 (您在git checkout分支时获得的所有文件)在DE(在这种情况下,无论如何,合并操作之前master上的B都没有变化)都是相同的,重新提交不同的提交。

从直git merge所不同的是,后者通常会产生一个“快进”,它看起来像这样:

A --- B 
     \ 
      C --- D  <-- foo_baz, master 

,其中该斜线可以理顺,给你一个历史的其中两个分支看起来完全一样。

0

我想你想要的是这样的:

git merge --squash foo_baz 
git commit