在git pull之后有一个提交

y3bcpkx1  于 2023-04-04  发布在  Git
关注(0)|答案(3)|浏览(148)

我在我的项目上的功能分支上工作实际上我想发送合并请求作为一个提交。我已经提交了我的更改,我已经发送了合并请求现在我有另一个关于我的功能的更改首先我运行

git pull origin develop

它给出了开发分支的一些更改,并在git log上显示新提交为Merge branch 'develop' of ...
我怎么能改变的事情再次我把它放在我自己的前一次提交和发送合并请求作为一个提交?
最佳做法是什么?

fhity93d

fhity93d1#

请注意,为了避免合并提交,你应该首先做的是 checkout 你的分支:

git fetch
git rebase origin/develop

# or, the equivalent command by slightly tweaking what you did:
git pull --rebase origin develop

这将使你的1(或2)个提交在origin/develop的顶部变基,而不是将origin/develop合并到你的分支中。注意,在这一点上你实际上仍然可以做同样的变基,因为默认情况下变基会删除合并提交,所以如果你运行上面的任何一个选项,你最终会使你的2个提交在origin/develop的顶部。
现在,如果您愿意,可以使用各种压缩方法将这两个提交压缩在一起,例如交互式rebase(git rebase -i @~2),或重置(软)回两个提交(git reset --soft @~2)并重新提交,类似于matt's answer
任何时候你重写你的分支后,你已经推它,你需要强制推更新你的分支在远程(这也应该自动更新你的合并请求),所以你可以用途:

git push --force-with-lease
b5lpy0ml

b5lpy0ml2#

正如我在评论中所说的,我不认为在已经提交的PR上重写历史是好的。但是如果你愿意,你可以这样做。你的当前情况在问题中没有很清楚地说明,但我会假设它看起来像这样(最新提交在顶部,时间随着我们的下降而向后运行):

aaaaaa (HEAD > myFeatureBranch) my second commit
bbbbbb the merge commit from develop
cccccc my first commit
dddddd [some commit reachable from develop]

然后我会写下“我的第二次提交”的SHA并说:

git fetch
git reset --hard cccccc
git rebase origin/develop
git cherry-pick aaaaaa
git reset --soft origin/develop
git commit -m 'my one commit'
git push --force
juzqafwq

juzqafwq3#

注:**[ESC]**表示退出键。

  1. git日志
    获取上一个日志ID -(不是最近的,而是之前的)
  2. git rebase -i PREVIOUS LOG ID
    1.(类型)i
    1.(编辑-将单词“pick”替换为“reword”)
    1.(类型)[ESC]:水q
    1.(类型)i
    1.(编辑-提交消息为您希望的内容)
    1.(类型)[ESC]:wq已成功重定基础...

相关问题