我想设置一个本地跟踪分支,它将通过合并而不是通过rebase跟踪远程分支
当我做git pull
时,我想从远程分支合并,而不是重组。
当我这样做时:
git checkout -b someBranch origin/someBranch
然后
git remote show origin
我明白了:
Local branches configured for 'git pull':
someBranch rebases onto remote someBranch
Local refs configured for 'git push':
someBranch pushes to someBranch (local out of date)
如果我这样做也会发生同样的事情
git checkout --track origin/someBranch
这是以某种方式在本地配置的吗? 如何更改此行为?
答案 0 :(得分:4)
默认情况下,GIT在拉动期间执行merge
。如果你的人正在做反叛,那么似乎在某些时候你改变了这种行为。或者有人为你做了有用的事。
在this article (1)和this article (2)以及this article (3)之后引用 - 这些都描述了如何做相反的事情:
(从1开始)
GIT中有一个配置标志,启用后,会将pull
的默认行为从merge
更改为rebase
。检查您是否设置了它:
# git >= 1.7.9:
git config --global pull.rebase
git config pull.rebase
在较新的GIT客户端中,它直观地工作。如果它是true
,则启用它。只要把旗子关掉。
在较旧版本中,它的工作方式不同。
# git < 1.7.9:
git config --global branch.autosetuprebase
git config branch.autosetuprebase
# and also
git config branch.<name>.rebase
当autosetuprebase
设置为always
时,git会在每个新分支上自动设置rebase
标志。这意味着只有您可能不仅要禁用autosetuprebase
,还要关闭每个分支的已设置rebase
标志。
(来自#2)
如果你想要另一种方式(即你已经拥有旧的GIT客户端和大量的分支,你真的很想写一个重置标志的脚本),那么另一个选择是创建一个git pull
的别名,它将添加--no-rebase
选项,会强制它进行合并。
(来自#3)
本文说每分支rebase
标志保存在配置文件中。因此,在关闭autosetuprebase
后,您似乎可以通过从该配置文件中删除所有rebase
行来快速禁用所有或某些分支上的rebaseing。