2013-02-21 124 views

回答

2

我发现做了合并提交之后。 我可以添加修改提交“git ci --amend”来更改提交消息, 这完全符合我的要求。我会接受我自己的答案作为正确答案。

Simon Boudrias和ranendra给出了相关答案,这些答案也以不同的方式起作用。所以我投了票。

7

你基本上有两个选项。

简单的解决方案:不合并,调整基线
调整基线主枝上的顶部您的分支,解决冲突,然后合并。由于您将有一个直线历史记录,因此您将能够快速合并,并且不会创建任何合并提交

git checkout feature 
git rebase main 
# Resolve conflict if there is 
git checkout main 
git merge feature 

第二个选项:调整基线-i
您可以将您的合并(之前你推到一个远程)后,编辑您的历史。您可以使用rebase交互模式进行管理。

git checkout main 
git merge feature 
#You merge and resolve conflict 
git rebase -i <sha of the commit before the merge> 

然后你就必须考虑到交互的shell与提交的清单,例如:

pick 73c991e Create progress bar module 
pick b8a0b83 merge branch feature 
pick 2120f47 Add user form 
pick 70c55e4 Quiz prototype system 

你只需要添加squashs代替pick

pick 73c991e Create progress bar module 
pick b8a0b83 merge branch feature 
s 2120f47 Add user form 
pick 70c55e4 Quiz prototype system 

该命令将压缩在一起b8a0b832120f47。下一步将是一个提交文本编辑器,您可以在其中同时提交邮件,现在由您来正确编辑它们以保留原始邮件。

+0

谢谢。我在一个分支中使用了很多压缩来组合提交。但我不知道合并的提交也可能被压缩。谢谢你的提示。 – kakyo 2013-02-22 18:15:28

+0

第二个想法是,我很好奇为什么我必须选择rebase合并。除了它没有给出正确的信息之外,我对合并的内容非常满意。我发现我可以用“git ci --amend”来改变它。根据这篇文章:http://stackoverflow.com/questions/804115/git-rebase-vs-git-merge/,rebase改变了我分支出功能分支的历史。我想保留这段历史。 – kakyo 2013-02-22 18:28:19

+0

然后你也可以用'git rebase -i'简单地编辑提交信息。而不是使用'squash',只能使用'edit'。我不是Git中保存历史的大保护者,对我而言,Git是编写项目历史的编辑器,它是如何有意义的,以及它如何易于使用(例如二分法)。因此,我广泛地使用rebase来保持我的历史整洁有用;这可能不是你的意见,但我相信它最终会成为现实。 – 2013-02-22 18:57:17

2

当你在主站和当地分支机构不同的变更,混帐创建一个额外的承诺为合并自动。为了阻止这种额外的提交发生,你可以在分支之前将主分支转为

$ git pull(in master which retrieves the new changes> 
$ git checkout <local_branch> 
$ git rebase master 
$ git checkout master 
$ git merge local_branch. 
9

-m参数就传递给merge命令:

$ git merge other-branch -m "Commit Message" 
0

首先,复制要保留原来的提交信息。

然后,在下面的例子中使用git merge,如:

$ git checkout mainBranch 
$ git merge featureBranch --squash --no-commit 

您可能需要解决冲突。

该方法避免了自动提交,因此所有文件都保留在索引上;因此,您可以使用您在第一步中保存的原始提交消息来提交代码。

我知道这是作弊,但它的作品。 =)