- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有没有办法配置 git
以便 git rebase --continue
跳过“无变化”测试?
我不希望 git rebase --continue
因为没有检测到任何变化而失败。发生这种情况时,它应该会自动删除提交。
为什么?
我经常遇到 git 的问题,我 git rebase --continue
失败了,因为它看不到任何变化,需要我说 git rebase --skip
。我明白为什么会发生这种情况,但它会减慢我的工作流程并使其更加危险:如果我正在做一个大型 rebase ,其中问题多次重复出现,以及合法的 merge 冲突,我更有可能不小心使用跳过命令从我打算重用 continue 命令的历史来看。
示例
假设我有以下历史:
A -- B -- C -- D -- E -- F <-- topic
\
H -- I <-- master
我想将提交 B、C、E 和 F 推送到 origin
中的主分支。
假设当我挑选它们时,B 工作正常,C 和 F 有一些由提交 H 和 I 引起的琐碎的 merge 冲突,并且 E 有一个重要的 merge 冲突,如果 H 和 I 是在历史中比如果 D 在历史中。解决这些冲突后,假设我的历史是:
A -- B -- C -- D -- E -- F <-- topic
\
H -- I -- B -- C' -- E'' -- F' <-- master
现在,我想将我的 topic
分支 rebase 到 master
上。这样做时,B 将被自动删除,但我会遇到 C、E 和 F 的 merge 冲突,因为它们在被挑选时被修改了。当 rebase 在 C 处暂停时,解决冲突不会产生任何净变化,因此当我尝试运行 git rebase --continue
时,git
会采取防御措施并提示:
No changes - did you forget to use 'git add'?
解决方案是改用git rebase --skip
。那时,E 会发生冲突;解决它需要实际更改,所以我实际上(并成功地)使用了 git rebase --continue
。然后,F 产生另一个虚假的 merge 冲突。与 C 一样,解决该冲突不会导致任何净更改,因此我再次被告知在尝试继续时使用跳过模式。
我想配置 git
以便当我解决 merge 冲突(特别是使用 mergetool
)并且解决结果没有净变化时,我想要 git rebase --continue
只做 git rebase --skip
的工作,最多提示我。如果它不够聪明,不知道我运行了 mergetool,我宁愿它总是自动跳过。 continue 选项似乎在防御不正确的 git checkout
命令 mid-rebase;这些天我对 git 已经足够熟悉了,永远不会有在 rebase 中不小心修改更改的危险。然而,当我的历史记录如下时,我几乎不小心跳过了:
git rebase # start the rebase
git mergetool # apply non-trivial fix
git rebase --continue # succeeds: non-trivial fix
git mergetool # apply non-trivial fix
git rebase --continue # succeeds: non-trivial fix
git mergetool # apply non-trivial fix
git rebase --continue # succeeds: non-trivial fix
git mergetool # nuke all changes from the topic branch
git rebase --continue # fails: no changes
git rebase --skip # this should have been automatic
git mergetool # apply non-trivial fix (THIS MUST NOT BE SKIPPED)
... here I have to be careful and not just reflexively hit up-arrow twice then <ENTER>...
最佳答案
有趣的问题。这里Automatically skip empty commits when using git rebase用户 Olivier Refalo 建议使用 G2 中的功能,为新手简化 git 界面。基本上它归结为在执行 git add
后检查索引中文件的内容是否与存储库中的文件不同。如果不同则执行 git rebase --continue
,如果相同则执行 git rebase --skip
。您可以创建执行以下操作的脚本:
#!/bin/sh
if git diff-index --quiet HEAD --; then
git rebase --skip
else
git rebase --continue
fi
或者你可以给你的 .gitconfig 添加一个别名:
[alias]
reb = "!if git diff-index --quiet HEAD --; then git rebase --skip; else git rebase --continue; fi"
关于git rebase --continue : how to suppress the "no changes" check,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23955504/
我有一个报告,当前以以下格式显示数据: GROUP HEADER January Meter Number Name Class Facility ... .
我有一份报告目前以下列格式显示数据: GROUP HEADER January Meter Number Name Class Facility ... ..
我有一个 WPF ListView 控件,其中包含一个用 XAML 代码编写的 ContextMenu。每次右键单击 ListView 时,即使 ListView 中没有任何项目,也会显示 Conte
在我刚接手的一个应用中发现了这一行,感觉没什么意义。 使用 (new TransactionScope(TransactionScopeOption.Suppress, new TimeSpan(1,
我目前正在学习一些基本的 java SQL 编码,为我的 SQL 项目制作基本的终端 UI。我一直在使用 PostgreSQL 我正在使用PreparedStatement为了确保自己免受 SQL 注
我已经实现了 native Android SIP solution在我的 Android 应用中。 SipProfile.Builder builder = new SipProfile.Build
我正在将指南支持库检查器集成到我的一个项目中。 Microsoft.CppCoreCheck Microsoft.Gsl 当我运行它时,我从标准库、glm、boost 等包含的库中得到了一堆错误。 一
我只是希望我的方法调用能够抑制它依次调用的方法中可能出现的所有“NoMethodError”异常。 def foo begin bar1 bar2 rescue Excepti
我最近开始尝试 clang-tidy llvm的工具。现在我试图抑制来自第三方库代码的错误警告。为此,我想使用命令行选项-header-filter=或 -line-filter=但到目前为止没有成功
我必须为 Kendo Grid 创建一个自定义的“更新”按钮。 基本上,它以编程方式将适当的行置于编辑模式(使用 editRow),将某些字段更新为特定值(使用 model.set),然后保存该行(使
我正在使用 Visual Studio 2015、FxCop 14.0。使用自定义规则,并尝试在 GlobalSuppressions.cs 中抑制消息。我在项目文件中设置了全局抑制的路径 .. .
我想回滚名为“scope”的事务,但名为 scope2 的内部事务不应回滚。但是他们都回滚了!!!选项 TransactionScopeOption.Suppress 不起作用... 我已经启用了 D
你好, 是否可以控制可以拖动哪些记录以及可以将它们放到哪里(在悬停期间从头开始或中间抑制拖动操作)? 我需要的详细信息如下: 我有一个包含一些组(比如男性和女性)的网格,只想激活组“女性”内的 d&d
以下(废话)Python模块的doctest失败: """ >>> L = [] >>> if True: ... append_to(L) # XXX >>> L [1] """ def ap
在git push heroku master上,我收到此错误: Unable to find suppressions file at location: etc/config/checkstyle
我正在尝试安装 Taiga在我的电脑上,对于其中一个脚本,它试图 import suppress 但失败了。我尝试手动执行此操作: (taiga)$ python Python 3.3.3 (defa
有时我会为某些可能运行我的应用程序的 Android 版本列出代码。使用最新 Android 工具的 Eclipse 仍然注意到我的 Manifest 文档允许较低版本的 Android,因此确定我的
我的 Android 项目中某处有这段代码: public boolean isLoadInProgress(boolean privateLoad, boolean publicLoad) {
我一直在开发一个通过 Android Beam 发送 NDEF 消息的 Android 应用程序和一个接收它们的桌面应用程序。 一切正常;但是,我个人认为 Android Beam“Tab to be
我正在使用 xlrd 来处理 Excel 文件。我在包含许多文件的文件夹上运行脚本,并且正在打印与这些文件相关的消息。但是,对于我运行的每个文件,我也会收到以下 xlrd 生成的错误消息: WARNI
我是一名优秀的程序员,十分优秀!