git - 当我拉动时如何配置 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 行为随心所欲?
解决方案
首先,您需要使您的观察更加一致。你首先给出时间线
在 time0 其他人更改了文件 B 并推送到远程。
在 time1 我更改了我机器中的文件 A,并提交了
(强调补充)。然后,您将您的情况与题为“ git pull 创建合并提交,即使我没有本地更改”(添加了重点)的问题进行比较。
当然,该答案不适用于您;您有本地更改。
当您有本地更改时,正常行为是在拉取远程更改时创建合并提交。
然后你说 git-tower 客户端没有产生合并提交。有可能发生的三个原因。
1)客户端可以配置为rebase而不是merge;但你说过事实并非如此。
2)可能没有本地更改
3) 可能没有远程更改 - 如果您在观察到创建合并的拉动后立即尝试此操作,则很有可能,因为合并中的更改不再只是远程的。
所以问题不在于你的 git 设置有什么问题;问题是如果您不想要合并提交,您有什么选择。
我错过的一个选项,torek 在下面的评论中指出,是使用更基本的命令。因此fetch
进行更改,然后以您想要的任何方式(通过merge
orrebase
等)将它们集成到您的本地。在您真正熟悉命令的作用之前,这可能是最好的选择。
(我知道 git 明确表示要拉入其错误消息;但是拉和(合并或获取)也可以。)
另一种选择是使用变基。根据 git 文档,这被认为具有潜在危险,但这是一种相当普遍的做法。如果您了解 rebase 及其含义,这是一个合理的方法。要将 git 配置为使用 rebase,您可以执行类似的操作
git config --global pull.rebase true
另一种选择是在本地使用与远程不同的分支。(这可能听起来很奇怪,但是基于这个想法有一些可行的工作流程。)在这种情况下,当您将一个分支集成到另一个分支时,您的合并或变基是明确选择的,而不是在您通过拉取隐式集成更改时被强制执行。
推荐阅读
- github-actions - 如何假设启动 GitHub Action 的用户?
- python - 如何在 scipy.io.wavfile.read 中明确定义采样率?
- docker - gitlab-runner 的 Docker 卷清理
- reactjs - 使用 craco 在运行时更改 antd 变量
- go - 如何使用切片构造嵌套结构
- android - Flutter 如何根据流事件自动弹出页面?
- flutter - Flutter - 发送电子邮件时面临邮件程序包的问题
- ruby-on-rails - 延迟作业无法将日志放入delayed_log.log
- asp.net-mvc - iisreset 后对象空引用异常消失
- swift - UICollectionViewDiffableDataSource 是否与 UICollectionViewDataSourcePrefetching 一起使用?