git:如何通过合并而不是通过变基来配置跟踪分支?

sho*_*osh 1 git merge

我想设置一个本地跟踪分支,它将通过合并而不是通过变基跟踪远程分支。
当我这样做时,git pull我想从远程分支合并,而不是变基。

当我做:

git checkout -b someBranch origin/someBranch
Run Code Online (Sandbox Code Playgroud)

进而

git remote show origin
Run Code Online (Sandbox Code Playgroud)

我懂了:

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)
Run Code Online (Sandbox Code Playgroud)

如果我这样做,也会发生同样的事情

git checkout --track origin/someBranch
Run Code Online (Sandbox Code Playgroud)

这是在本地以某种方式配置的吗?
我该如何改变这种行为?

que*_*atl 5

默认情况下,GITmerge在拉取期间执行。如果您正在执行 rebase,那么您似乎在某个时间点改变了这种行为。或者有帮助的人为你做了那件事。

引用这篇文章(1)这篇文章(2)这篇文章(3) - 它们都描述了如何做相反的事情:

(来自 1)GIT 中有一个配置标志,启用后,会将pullfrom的默认行为更改mergerebase。检查您是否已设置:

# git >= 1.7.9:
git config --global pull.rebase
git config pull.rebase
Run Code Online (Sandbox Code Playgroud)

在较新的 GIT 客户端中,它可以直观地工作。如果是true. 关掉旗子就好了

然而,在较旧的情况下,它的工作方式有所不同。

# git < 1.7.9:
git config --global branch.autosetuprebase
git config branch.autosetuprebase

# and also
git config branch.<name>.rebase
Run Code Online (Sandbox Code Playgroud)

autosetuprebase设置为 时always,git 会自动rebase在每个新分支上设置标志。这意味着只有您可能不仅要禁用autosetuprebase,还要关闭rebase每个分支的已设置标志。

(来自 #2)
如果你想要另一种方式(即你有旧的 GIT 客户端和大量的分支,并且你确实介意编写一个重置标志的脚本)那么另一种选择是创建一个别名来git pull添加--no-rebase选项,什么会迫使它进行合并。

(来自#3)
这篇文章说每个分支的rebase标志保存在一个配置文件中。因此,关闭autosetuprebase后,您似乎可以通过rebase从该配置文件中删除所有行来快速禁用所有或某些分支的变基。