我在我的项目上的功能分支上工作实际上我想发送合并请求作为一个提交。我已经提交了我的更改,我已经发送了合并请求现在我有另一个关于我的功能的更改首先我运行
git pull origin develop
它给出了开发分支的一些更改,并在git log上显示新提交为Merge branch 'develop' of ...我怎么能改变的事情再次我把它放在我自己的前一次提交和发送合并请求作为一个提交?最佳做法是什么?
git log
Merge branch 'develop' of ...
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。任何时候你重写你的分支后,你已经推它,你需要强制推更新你的分支在远程(这也应该自动更新你的合并请求),所以你可以用途:
origin/develop
git rebase -i @~2
git reset --soft @~2
git push --force-with-lease
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
juzqafwq3#
注:**[ESC]**表示退出键。
3条答案
按热度按时间fhity93d1#
请注意,为了避免合并提交,你应该首先做的是 checkout 你的分支:
这将使你的1(或2)个提交在
origin/develop
的顶部变基,而不是将origin/develop
合并到你的分支中。注意,在这一点上你实际上仍然可以做同样的变基,因为默认情况下变基会删除合并提交,所以如果你运行上面的任何一个选项,你最终会使你的2个提交在origin/develop
的顶部。现在,如果您愿意,可以使用各种压缩方法将这两个提交压缩在一起,例如交互式rebase(
git rebase -i @~2
),或重置(软)回两个提交(git reset --soft @~2
)并重新提交,类似于matt's answer。任何时候你重写你的分支后,你已经推它,你需要强制推更新你的分支在远程(这也应该自动更新你的合并请求),所以你可以用途:
b5lpy0ml2#
正如我在评论中所说的,我不认为在已经提交的PR上重写历史是好的。但是如果你愿意,你可以这样做。你的当前情况在问题中没有很清楚地说明,但我会假设它看起来像这样(最新提交在顶部,时间随着我们的下降而向后运行):
然后我会写下“我的第二次提交”的SHA并说:
juzqafwq3#
注:**[ESC]**表示退出键。
获取上一个日志ID -(不是最近的,而是之前的)
1.(类型)i
1.(编辑-将单词“pick”替换为“reword”)
1.(类型)[ESC]:水q
1.(类型)i
1.(编辑-提交消息为您希望的内容)
1.(类型)[ESC]:wq已成功重定基础...