autosetuprebase vs autosetupmerge

Rob*_*son 62 git

我刚刚在我的全局.gitconfig文件中敲了一下,我发现我已经设法最终得到了这个:

[branch]
  autosetupmerge = always
  autosetuprebase = always
Run Code Online (Sandbox Code Playgroud)

这似乎有点违反直觉,但在做了一些阅读之后,我仍然不知道我是否需要两者,或者它是否足以删除autosetupmerge并保留autosetuprebase.我工作的大多数项目都有直接的下游 - >上游流程,因此在处理分支时通常首选变基.

las*_*lok 97

这里违反直觉的是这些偏好的命名.它们确实看起来像是指相同的功能,但事实上它们并没有:

  • autosetupmerge控制是否git branchgit checkout -b暗示--track选项,即您的设置always,
    • git checkout branchname,如果branchname存在于远程但不在本地,将创建branchname跟踪其远程对应物
    • git checkout -b newbranchnewbranch在发出此命令之前,将创建一个新的分支跟踪您检出的分支
  • autosetuprebase控制是否应将新分支设置为重新git pull设置,即您的设置always将导致分支设置为git pull始终执行rebase,而不是合并.(请注意,更改此选项时,现有分支会保留其配置.)

因此,它可以完美的同时拥有autosetupmerge = alwaysautosetuprebase = always; 事实上,这也是我所拥有的.

  • 很好的答案。简而言之,避免两者并避免像 plage 那样“拉”。真的。如果您从不使用 `pull`,您将了解 git 的内部工作原理并最终获得更好的工作流程。要么`git远程更新; git rebase/merge upstream/master` 或 `git fetch; git rebase upstream/master`... git pull 最终会做一些你意想不到的事情。然后你就不会对内部运作有足够的了解。今天多打字并学习,而不是在不知道如何解决的情况下陷入困境:) (4认同)
  • 我得到的印象是,这两个(甚至是rebase)都可以很好地访问少量项目的有限数量的远程回购,所有项目都需要相同的内部工作流程.但我想,对于那些计划承诺各种不同工作流程/政策的项目的人来说,你的建议是非常明智的. (2认同)
  • 要更改现有分支的此设置,请使用:`git config branch.<branchname> .rebase true` (2认同)

gue*_*tli 32

因为这是第一次点击,如果你用谷歌搜索"autosetuprebase",这里有一个建议:

git config --global branch.autosetuprebase always
Run Code Online (Sandbox Code Playgroud)

来源http://mislav.uniqpath.com/2010/07/git-tips/

  • 而且,因为放弃会导致你失去生存的意愿[这就是为什么你不应该这样做](http://geekblog.oneandoneis2.org/index.php/2013/04/30/please-stay-away-from-rebase #c6964) (7认同)
  • @EliasVanOotegem我在你的链接上看不到任何好的论点. (7认同)
  • 我五年前写了这个答案.我不再使用它了.我今天更愿意合并.但我没有和我目前的git工作流程结婚.也许我将来会做不同的事情.今天,"合并与变革"这一主题对我来说并不重要.我喜欢我最喜欢的IDE的"显示历史选择".我更关心这一点.如果您使用"显示历史记录进行选择"查看更改,则根本不重要,如果使用了合并的rebase.结果很重要,而不是通向它的道路. (2认同)

小智 25

值得一提的是,autosetupmerge = always(在您的配置中)和autosetupmerge = true(默认值)之间存在差异.

true将仅为远程分支设置合并.总是会包括当地的分支机构.

你可能想要真实.


Via*_*iuk 22

当我在寻找"autosetuprebase"的其他可能选项时,花了一些时间才找到它们,这里它们是:

branch.autosetuprebase
Run Code Online (Sandbox Code Playgroud)

当使用git branchgit checkout跟踪另一个分支创建新分支时,此变量告诉Git设置pull to rebase而不是merge(请参阅"branch..rebase").

  • 何时never,rebase永远不会自动设置为true.
  • 何时local,对于其他本地分支的跟踪分支,将rebase设置为true.
  • remote,变基被设置为true的远程跟踪分支跟踪分支.
  • 何时always,对于所有跟踪分支,rebase将设置为true.

资料来源:http://git-scm.com/docs/git-config.html