【问题标题】:Bitbucket - Single commit for all the commit'sBitbucket - 所有提交的单次提交
【发布时间】:2021-03-15 21:42:24
【问题描述】:

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

Image1

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

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

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

【问题讨论】:

  • 听起来好像你只是说你想将多个提交压缩成一个提交,以清理你的历史记录。使用交互式变基非常容易。
  • @matt 我已经添加了图片,请检查。黑点(节点)是提交。对于每次提交新提交,都会生成新节点。我正在尝试为图形上的所有提交获取单个节点
  • @matt 我希望问题现在很清楚
  • 好的,因此对于不同的提交,创建了不同的节点,在我的团队中,他们只希望为所有提交创建 1 个节点。这就是我使用append 的原因,这样就不会创建新的提交并将更改推送到先前的提交。 Pushing to old commit without creating new commit is what I am trying to achieve
  • 如果你在一个分支上工作并且你做了很多提交,你可以在推送和请求拉取请求之前将它们压缩为一个提交。也许这就是你的团队告诉你的。为什么不问问他们是不是这个意思?

标签: bitbucket commit git-branch git-amend


【解决方案1】:

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

将链中的所有提交压缩为单个提交的一种方法是软重置回到第一个提交,然后修改该提交。见我的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

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

【讨论】:

  • 可以在每次提交时执行commit --amend 来做到这一点,但我永远不记得这样做,而且我不喜欢这样做;它太局限了。使用交互式 rebase,我可以继续工作、前进、后退、改变主意、尝试一些事情,当我完成并准备好推送时,我会按照我向您展示的那样将所有内容压缩到一个提交中来进行清理。
  • 谢谢你的详细回答,我会试试这个
  • 嘿@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
  • 嗯,重写你已经推送的历史非常困难,但你可能只能用力推送。但是下次不要那样做!不过那真的是另一回事了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 2011-06-17
  • 1970-01-01
  • 2012-09-16
  • 2018-12-24
  • 2013-01-28
相关资源
最近更新 更多