【发布时间】:2015-07-15 03:15:38
【问题描述】:
我有一个存储库和一些要提交的本地更改。 在提交之前,我在 Eclipse 中使用 Egit 将更改拉到本地。
它创建一个合并提交,然后我提交我的提交。
现在,当我尝试推送到原点时,它表明它将推送我的提交以及合并提交。 但理想情况下,合并提交不应成为远程存储库的一部分。
如何避免这种情况?
【问题讨论】:
我有一个存储库和一些要提交的本地更改。 在提交之前,我在 Eclipse 中使用 Egit 将更改拉到本地。
它创建一个合并提交,然后我提交我的提交。
现在,当我尝试推送到原点时,它表明它将推送我的提交以及合并提交。 但理想情况下,合并提交不应成为远程存储库的一部分。
如何避免这种情况?
【问题讨论】:
每当您从远程存储库中拉取时,请使用 rebase 选项。请按照以下步骤操作,
git pull --rebase <remote-name> <branch-name>。【讨论】:
当您有未提交的更改时,您可以这样做,
git stash
git pull --rebase <remote> <branch>
git stash apply
【讨论】:
git pull --rebase(指this link。会有什么区别?
git pull --rebase。否则,您必须明确提及远程名称和分支名称。
git pull --rebase --autostash。
你可以跑
git config --global branch.autosetuprebase always
使 git pull --rebase 成为 git pull 的默认行为。
【讨论】:
如果您不希望合并提交,将本地分支同步到远程分支的最佳方法是执行 rebase。建议您先执行git fetch,然后执行git rebase,但是,正如其他人所提到的,您可以同时执行这两个操作:
git pull --rebase --autostash
如果您总是这样做,您可以将git pull 配置为自动执行此操作:
git config --global pull.rebase true
git config --global rebase.autostash true
【讨论】:
通常的策略是在分支上工作。当远程 master 更改时,将更改拉到 master 上,而不是合并,rebase 分支。
请参阅 Atlassian 的 Git Rebase。
【讨论】:
场景:
假设 a 是在 GIT 存储库中提出的 PR:从 feature/my_bug_fix 到 release/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 merge 就会出现。
此外:
pull = fetch + merge
pull --rebase = fetch + rebase
所以,选择处理分支的方式。
您现在应该更好地理解合并和变基之间的区别:)
【讨论】: