当我拉动时如何配置git以便不创建合并提交?

时间:2018-08-24 14:02:16

标签: git

我的代表带有文件 A 和文件 B
在时间0,其他人更改了文件 B 并推送到远程。
在time1,我更改了计算机中的文件 A 并提交了,当我将其推送到远程源时,git说我需要拉,所以我发出了命令 git pull ,然后git pull文件 B ,但是它创建了一个合并,如果我什至不更改文件 B ,我都没有必要!

我搜索了SO,发现了此信息git pull creates merge commit even when i have no local changes
但是可悲的是,我的.gitconfig文件不包含 mergeoptions = --no-ff ,所以我的git有什么问题?

我用git-tower客户端https://www.git-tower.com/windows尝试了相同的方法,但是它没有创建合并提交,我确定git-tower在拉动时不使用rebase,因为当我按下拉动按钮时,我被问是否要使用rebase,但我选择不。

那么,我该如何根据需要进行git行为?

1 个答案:

答案 0 :(得分:0)

首先,您需要使观察结果更加一致。您先给出时间轴

  

在时间0,其他人更改了文件B并推送到远程。

     

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

(添加了强调)。然后,将您的情况与题为“即使我没有本地更改时,git pull也会产生合并提交 ”(强调)相加。

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

当您进行本地更改时,通常的行为是在拉动远程更改时创建合并提交。

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

1)可以将客户端配置为变基而不是合并;但是你说的不是那样。

2)可能没有本地更改

3)不可能有远程更改-如果您在观察创建合并的请求之后尝试此操作,则很有可能,因为合并中的更改不再仅仅是远程的。

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

我想念的一个选项是使用更基本的命令,我想在下面的评论中指出。因此,fetch进行更改,然后以所需的任何方式(通过mergerebase等将其集成到您的本地中。除非您真的对命令的作用感到满意,否则这可能是最好的选择。

(我知道git专门说要拉入它的错误消息;但是pull和(合并或提取)也一样。)

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

git config --global pull.rebase true

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