git pull创建了一个不必要的合并提交

ars1skjm  于 2023-05-27  发布在  Git
关注(0)|答案(1)|浏览(163)

我的团队使用gerrit来存储源代码,我们都在main分支(团队的WoW)上开发。这是我正在处理的情况:
1.我在main中做了一些修改,推送并等待审核。如果此时运行git status,输出如下所示。

dustin@linux:~/workspace/proj$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

1.我的领导审核了+2,这样我的更改就可以合并到main(我确认了)。
1.我的队友做了一些改变,这些都是合并后,我(我承认这一点)。
1.我需要推送另一个更改,我运行git pull
1.终端打开Vim编辑器,提交消息如下所示

commit 111111111111111111111111111111111111 (HEAD -> main)
Merge: 22222222 33333333
Author: dustin
Date:   Tue May 23 00:00:00 2023

    Merge branch 'main' of ssh://gerrit.com/proj into main

2222是我的变化,3333是我的队友的变化。
在第5步之后,我期望的结果是只将main的最新更改更新到我的本地,不需要合并提交。
通常情况下,在git创建了一个合并提交后,我运行git reset --hard HEAD^,以便将HEAD移动到3333,然后运行git pull,没有“合并提交”发生。这些步骤相当复杂,我认为可以更容易。我该怎么办?

qyswt5oh

qyswt5oh1#

您可能会感到困惑,因为本地机器上的main与远程机器上的main不同,它们只是碰巧被称为相同。pullfetch,然后是merge,所以你要做的是:

  • 获取远程的main(到本地远程分支remote/origin/main),
  • 将其合并到当前检出的分支中,即本地main

如果这个合并需要一个合并提交,它就会被创建。这是故意的。
我建议修改你的工作流程:不要直接提交到共享分支(main)。你也许可以保护在Gerrit的分支。
当你想更新你的本地main以反映远程的main时,下面是命令:

git fetch origin main:main

当你开始做新的事情:

  • 获取main的最新提交:git fetch origin main:main(这样您的本地main与远程的main匹配,避免混淆)
  • 创建一个特定于新内容的分支:git checkout main && git checkout -b new-branch
  • 提交到本地new-branch
  • 当您准备好进行检查时,将new-branch推到gerrit或您正在使用的任何工具
  • 审阅者发表评论,你在同一个分支中修复事情,直到完成为止
  • 审核通过后,从gerrit中合并到main
  • 现在每个人都可能希望通过获取main来获取合并后的更改

相关问题