Bitbucket - 所有提交的单一提交

Bitbucket - Single commit for all the commit's

我目前正在使用 BitBucket 作为我项目的版本控制。我在多次提交时看到不同的 node (In the image with black dots/multiple commits)Branch graph。对于我所做的所有提交,我如何确保分支图上只存在 one node?换句话说,所有 commits 必须被视为 1 commitnot incremental

Image 1

我试过使用 git commit --amend -m "Message" 但它总是给我

error: failed to push some refs hint:'git pull' before pushing again

所以我 git pullpush 再次创建了一个新的提交。

你的要求是完全合理的;我也喜欢这样做。我可以继续在我的分支上提交,然后当我准备好推送时,我 将它们全部压缩为一个提交 ,然后推送。所以看到我的 PR 的人将其视为一个成品;他们不需要看到我如何到达那里的整个历史。

将链中的所有提交压缩为单个提交的一种方法是软重置回到第一个提交,然后修改该提交。看我的three types of regret;这是遗憾类型 1.

不过,总的来说我喜欢用interactive rebase。这是一个例子。我们正在一个分支 mybranch 上工作,我们已经做了三个提交:

* cd591cc (HEAD -> mybranch) z
* cdbe774 y
* 3ce8eaa x
| * e86283a (master) b
|/  
* 4227e7d a

现在我想推送,这样我们就可以合并到 master。但我不想要三个提交 xyz。我只想要一次提交。

所以我说:

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

正是我想要的!我的分支只是一个提交,现在我准备合并(或推送拉取请求)。