如何避免合并提交从 Git 拉时推到远程

我有一个存储库和一些本地更改要提交。 在提交之前,我使用 Eclipse 中的 Egit 将更改拖放到本地。

它创建一个合并提交,我通过它提交我的提交。

现在,当我尝试推送到原点时,这表明它将推送我的提交和合并提交。 但是理想情况下,合并提交不应该是远程存储库的一部分。

如何避免这种情况?

58780 次浏览

通常的策略是在树枝上工作。当远程主服务器发生更改时,将更改拉到主服务器,而不是合并 重新定位分支。

参见 Atlassian 的 ABc0。

每当您从远程存储库中提取数据时,请使用 rebase 选项,

  1. 提交您的更改-它将在您的本地创建一个新的提交。
  2. 现在做 git pull --rebase <remote-name> <branch-name>
  3. 基本上,rebase 将您在当前分支 HEAD 上提交的提交作为补丁删除。然后它将应用 HEAD 上的所有远程提交,然后应用您的提交。
  4. 因此,最佳实践是提交更改,然后使用 rebase 选项进行远程提交。

当您有未提交的更改时,您可以这样做,

git stash
git pull --rebase <remote> <branch>
git stash apply

你可以逃跑

git config --global branch.autosetuprebase always

使 git pull --rebase成为 git pull 的默认行为。

场景:

假设在 GIT 回购中引发了一个 PR: 从 feature/my_bug_fixrelease/project-007。 但是由于 上述分支之间的冲突的原因,GIT 不允许合并。

然后这样做:

$ git checkout feature/my_bug_fix


$ git pull --rebase origin release/project-007


$ # resolve any conflicts encountered during the process


$ git rebase --continue


$ git push origin feature/my_bug_fix  --force

这是一个有效和干净的方法来解决冲突的分支。此外,通过使用 —— rebase,您 不会得到合并提交,否则将出现,如果您使用 git 合并。

此外:

pull          = fetch + merge


pull --rebase = fetch + rebase

因此,请选择处理分支的方式。

您现在应该更好地理解 merge 和 rebase 之间的区别:)

如果不希望进行合并,那么将本地分支与远程分支同步的最佳方法是执行 rebase。建议你先做 git fetch,然后做 git rebase,不过,正如其他人提到的,你可以同时做这两件事:

git pull --rebase --autostash

如果你总是这样做,你可以配置 git pull自动这样做:

git config --global pull.rebase true
git config --global rebase.autostash true