我有一个存储库和一些本地更改要提交。 在提交之前,我使用 Eclipse 中的 Egit 将更改拖放到本地。
它创建一个合并提交,我通过它提交我的提交。
现在,当我尝试推送到原点时,这表明它将推送我的提交和合并提交。 但是理想情况下,合并提交不应该是远程存储库的一部分。
如何避免这种情况?
通常的策略是在树枝上工作。当远程主服务器发生更改时,将更改拉到主服务器,而不是合并 重新定位分支。
参见 Atlassian 的 ABc0。
每当您从远程存储库中提取数据时,请使用 rebase 选项,
git pull --rebase <remote-name> <branch-name>
当您有未提交的更改时,您可以这样做,
git stash git pull --rebase <remote> <branch> git stash apply
你可以逃跑
git config --global branch.autosetuprebase always
使 git pull --rebase成为 git pull 的默认行为。
pull --rebase
场景:
假设在 GIT 回购中引发了一个 PR: 从 feature/my_bug_fix到 release/project-007。 但是由于 上述分支之间的冲突的原因,GIT 不允许合并。
feature/my_bug_fix
release/project-007
然后这样做:
$ 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 fetch
git rebase
git pull --rebase --autostash
如果你总是这样做,你可以配置 git pull自动这样做:
git pull
git config --global pull.rebase true git config --global rebase.autostash true