我目前正在将其BitBucket
用作项目的版本控制。我看到不同node (In the image with black dots/multiple commits)
的Branch graph
多个提交。如何确定我所做one node
的所有提交仅出现在分支图上?换句话说,所有内容都commits
必须视为1 commit
和not incremental
我尝试使用,git commit --amend -m "Message"
但它总是给我
error: failed to push some refs hint:'git pull' before pushing again
所以,我git pull
和push
这再次创造了新的承诺。
你要执行的操作是完全合理的;我也喜欢这样做。我可以继续在分支上进行提交,然后在准备进行推送时,将它们全部压缩为一次commit并进行推送。因此,看到我的PR的人们将其视为单个成品。他们不需要查看我到达那里的全部历史。
将链中的所有提交压缩为单个提交的一种方法是将软复位返回到第一个提交,然后修改该提交。看我三种遗憾; 这是遗憾的类型1。
但是,总的来说,我喜欢为此使用交互式变基。这是一个例子。我们正在分支上,mybranch
并已进行了三项提交:
* cd591cc (HEAD -> mybranch) z
* cdbe774 y
* 3ce8eaa x
| * e86283a (master) b
|/
* 4227e7d a
现在我要推送,以便我们可以合并到master
。但是我不希望三个提交x
和y
和z
。我只想提交一次。
所以我说:
git rebase -i 4227e7d
(因为这是分支开始的地方)。编辑器打开,我看到了:
pick 3ce8eaa x
pick cdbe774 y
pick cd591cc z
我这样重写它:
pick 3ce8eaa x
squash cdbe774 y
squash cd591cc z
我保存并关闭编辑器。编辑器再次打开,因此我可以编写提交消息。我删除了编辑器中的所有内容,并将其替换为:
my very cool work
我保存并关闭编辑器。现在事情看起来像这样:
* bb8c9fb (HEAD -> mybranch) my very cool work
| * e86283a (master) b
|/
* 4227e7d a
正是我想要的!我的分支只是一次提交,现在我可以合并了(或为拉取请求而推送)。
您可以在
commit --amend
每次提交时都这样做,但是我不记得要这样做,而且我不喜欢它。这太局限了。使用交互式变基,我可以继续工作,前进,后退,改变主意,尝试一些事情,当我完成并准备推动时,我会像我向你展示的那样将所有内容压缩为一次提交进行清理。谢谢您的详细回答,我会尝试的
嘿@matt之后我该怎么办
save and close the editor
?git push
此后我需要做吗?在git status
上面说your branch has diverged and have 1 and 6 different commits each, respectively(use "git pull " to merger the remote in yours)
我仍然有推送更改
to the open pr
要合并到master branch
好吧,很难重写您已经推送的历史记录,但是您可能只能强行推送。但是下次不要这样做!但这确实是另一回事。