首页 > 解决方案 > 当我拉动时如何配置 git 使其不会创建合并提交?

问题描述

我有一个文件A和文件B的代表,
在 time0 其他人更改了文件B并推送到远程。
在 time1 我更改了我机器中的文件A并提交了,当我推送到远程原点时,git 说我需要 pull,所以我发出命令git pull和 git pull file B,但它创建了一个合并,我没有这是必要的,万一我什至没有更改文件B

我搜索了 SO,发现即使我没有本地更改,这篇文章 git pull 也会创建合并提交,
但遗憾的是,我的 .gitconfig 文件不包含mergeoptions = --no-ff,那么我的 git 有什么问题?

我对 git-tower 客户端https://www.git-tower.com/windows尝试了相同的方法,但它不会创建合并提交,我确信 git-tower 在拉取时不会使用 rebase,因为当我点击 pull 按钮,我被问到是否使用 rebase,但我选择不。

那么,我需要如何让我的 git 行为随心所欲?

标签: git

解决方案


首先,您需要使您的观察更加一致。你首先给出时间线

在 time0 其他人更改了文件 B 并推送到远程。

在 time1 我更改了我机器中的文件 A,并提交了

(强调补充)。然后,您将您的情况与题为“ git pull 创建合并提交,即使我没有本地更改”(添加了重点)的问题进行比较。

当然,该答案不适用于您;您有本地更改。

当您有本地更改时,正常行为是在拉取远程更改时创建合并提交。

然后你说 git-tower 客户端没有产生合并提交。有可能发生的三个原因。

1)客户端可以配置为rebase而不是merge;但你说过事实并非如此。

2)可能没有本地更改

3) 可能没有远程更改 - 如果您在观察到创建合并的拉动后立即尝试此操作,则很有可能,因为合并中的更改不再只是远程的。

所以问题不在于你的 git 设置有什么问题;问题是如果您不想要合并提交,您有什么选择。

我错过的一个选项,torek 在下面的评论中指出,是使用更基本的命令。因此fetch进行更改,然后以您想要的任何方式(通过mergeorrebase等​​)将它们集成到您的本地。在您真正熟悉命令的作用之前,这可能是最好的选择。

(我知道 git 明确表示要拉入其错误消息;但是拉和(合并或获取)也可以。)

另一种选择是使用变基。根据 git 文档,这被认为具有潜在危险,但这是一种相当普遍的做法。如果您了解 rebase 及其含义,这是一个合理的方法。要将 git 配置为使用 rebase,您可以执行类似的操作

git config --global pull.rebase true

另一种选择是在本地使用与远程不同的分支。(这可能听起来很奇怪,但是基于这个想法有一些可行的工作流程。)在这种情况下,当您将一个分支集成到另一个分支时,您的合并或变基是明确选择的,而不是在您通过拉取隐式集成更改时被强制执行。


推荐阅读