我通过vanilla
接口将回购github
分配到vanilla_copy
,
之后我做:git clone vanilla_copy
,过了一段时间我做了
git pull
并获得一个新的提交feature A
,我的历史现在看起来像
Merge remote-tracking branch 'upstream/master'
feature A
在我做出自己的事后,它变成了:
feature created by me
Merge remote-tracking branch 'upstream/master'
feature A
现在我要创建pull request
到vanilla
,
我的提交feature created by me
是否正常
vanilla
repo中不存在的内容
我应该如何使用git
来创建此auto merge commit
,使用git pull --rebase
或通过vanilla/master
追踪vanilla_copy/upstream
并使用git rebase branch
或其他一些机制?
我应该如何删除此现有的合并提交?我应该通过git rebase -i
然后git push -f
删除提交,如下所述:Delete Github commit history?
答案 0 :(得分:1)
为了保持git repos易于导航,我在提交拉取请求之前将我的提交压缩到几个或一个谨慎的变更集。修复错误通常只需要一次提交,而较大的功能可能包含几个单独的改进,通过不同的提交更容易跟踪。
一旦您在上游主服务器的最新状态之上重新设置了工作,您可能会有几个与您正在处理的问题相关的提交。一切都完成后,将它们压缩成一个带有描述性消息的提交,例如"问题#100:一些错误修正。"
要将四个提交压缩为一个,请执行以下操作:
$ git rebase -i HEAD~4
在出现的文本编辑器中,替换“" pick"用"壁球"在提交之前,你想要压缩它之前的提交。保存并关闭编辑器,git会将" squash" ed提交与之前的提交相结合。然后,Git会让您有机会将提交消息更改为"问题#100:修复了一些错误。"
重要:如果您已经将提交推送到GitHub,然后在本地压缩它们,则必须强行推送到您的分支机构。
$ git push origin branch-name --force
有用的提示:在推送之前,您始终可以使用以下命令编辑上次提交消息:
$ git commit --amend