问题标签 [git-interactive-rebase]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
12489 浏览

git - Git 打开默认的 git 编辑器而不是 VIM 或任何其他编辑器(Git Rebase)

我最近安装了 Vim。现在,当我在交互模式下 rebase 我的分支时,Git 会自动打开 Vim。

但是,我不想在交互模式下打开 Vim;相反,我想打开默认的 Git 交互模式编辑器。如何设置 Git 使用的默认交互式编辑器?

0 投票
0 回答
261 浏览

git - 撤消git中的交互式rebase后恢复提交列表?

我的情况:有两个遥控器,originfork(后者归我所有)。我检查了origin/devel,更改了一些代码并提交了 5x 到我的本地分支test。我将我的提交推送到fork/test.

然后我开始了一个交互式变基,在我的本地test分支上:

Git 打开了一个编辑器,其中列出了我的 5 个提交,准备好选择、压缩或其他任何内容。

我不小心关闭了编辑器,而不是删除所有内容或 Ctrl+C 和git rebase --abortgit 控制台。因此,它开始了变基。

为了撤消它,我使用了git reflogandgit reset --hard HEAD@{...}以及git checkout fork/test -B test后来,因为我的遥控器也应该包含 pre-rebase 状态。他们似乎都恢复了状态,但如果我再次启动 rebase,列表中将没有提交(只有一个noop条目)。

如何恢复变基前的原始状态,以便再次显示原始提交列表?

撤消 git rebase不涉及此问题。我主要感兴趣的是为什么会发生这种情况以及如何真正恢复变基,而不是如何更改rebase命令以再次获取提交列表(正如我所说,从我的角度来看git resetgit checkout没有正确撤消它)。

最终目标是在以后的某个时间将我的test分支重新定位到最新origin/devel的,压缩我自己的所有提交,因为testorigin/devel.

//编辑:看起来 Git 忘记了分叉点。但是,在我自己的提交之前git merge-base --fork-point origin/devel确实返回了提交,并给了我初始提交列表。那么为什么不再这样做呢?origin/develgit rebase -i that-commit--onto

0 投票
1 回答
70 浏览

git - 为什么交互式 rebase 会将我的提交压缩在一起?

假设我有以下三个提交:

我使用以下命令来执行交互式变基(如另一个 StackOverflow 线程中所述)

在默认编辑器中,将要修改其提交的行中的“pick”修改为“edit”。进行更改,然后使用之前的相同消息提交它们:

修改提交,然后

问题是,有时,当我完成时,提交已被压缩为一个提交(a在我的示例中是最旧的提交)。

似乎它可能与要解决的合并冲突有关,所以我怀疑我可能在解决后继续不正确。解决合并冲突后,我不确定是否需要简单地做或git rebase --continue两者兼而有之$ git commit --all --amend --no-editgit rebase --continue似乎在这两种情况下,我最后都合并了提交,但我不确定。

我究竟做错了什么?

0 投票
1 回答
279 浏览

git - git:自动特定于行的修复

我最近了解了git commit --fixup哪些将您的提交标记为先前提交的修复,并在交互式 rebase 期间自动将它们排列在一起。

如何为多行自动和单独执行此操作?

举个例子。我的 git 历史如下所示:

在我的工作树中,我更改了a()文件 A.cpp 的方法中的一些行,并且b()(也许我添加了一个方法c())。请注意,我这里只讲函数是为了让交流更容易——当然,git 不知道编程语言。

是否可以从我在工作树中的两个单独更改中自动生成两个单独的修复提交,即:

(现在工作树包含 A.cpp 中添加的更改c())如果这适用于工作树中的多个文件(而不仅仅是本示例中的单个 A.cpp),那就太好了

更新,替代措辞:

git-blame 向我显示每行的最后一次提交。如果我现在更改一行,我想修复 git-blame 之前向我展示的该行的提交。

0 投票
2 回答
1020 浏览

git - 如何压缩和编辑相同的提交?

当我在 git 中进行交互式 rebase时,我如何squash提交并停止结束edit同一个提交?

0 投票
3 回答
530 浏览

git - 重置为 ORIG_HEAD 后,git 仍处于状态变基

我遇到了交互式 rebase 的麻烦:因为我无法通过以下方式中止交互式 rebase

我尝试过了

但是,当我运行 git status 时,我现在得到

有没有办法可以将 git 重置为交互式 rebase 之前的状态?

0 投票
4 回答
4714 浏览

git - git 交互式 rebase squash 进入下一个提交

在 Git 中,我可以使用交互式 rebase 来重写历史记录,这很棒,因为在我的功能分支中,当我探索不同的重构和完成它的方法时,我使用部分工作代码进行了大量提交。

在将分支重新定位或合并到 master 之前,我想将很多提交压缩在一起。

有些按从第一个(顶部)到底部(最后一个)的顺序组成提交

假设我想保留提交 3、4 和 7。

使用 rebase 我想“压缩”提交

  • 1 和 2 进入 3。
  • 4 次住宿
  • 5和6进入7

理想情况下,我会在交互式变基中

但这是倒退的,因为 squash 将提交与之前的提交合并。我不知道如何使它向前挤压。

我是不是很难,我应该接受这行不通(我宁愿让它工作),还是有办法做到这一点?

我正在调用这个命令

然后我正在编辑出现的提交列表,并尝试通过保存文件并编辑编辑器来完成它,这通常对我有用。

0 投票
3 回答
15135 浏览

git - Git:交互式地重新调整一系列提交

我正在尝试rebase -i一些发生在我历史上一段时间的提交。假设我有这样的日志:

我想压缩 3 个测试提交。在这种情况下,git rebase -i HEAD~106不是很实用。我正在寻找的是类似git rebase -i 64bd9e7:26c612d.

git 是否有这种行为,如果有,我该如何使用它?

我看过这篇文章,但它没有回答我的问题。

0 投票
1 回答
1702 浏览

git - 如何在 Git 交互模式下工作 - 无法使用文本编辑器?

编辑:

原来是编辑器 VIM 难用,而不是命令。我发布了一个如何退出 VIM 编辑器的链接,供大家参考:

如何退出 Vim 编辑器?


我知道这是一个非常新手的问题,但是在我阅读教程的所有地方,他们只是说以交互模式打开,选择这个,挤压那个然后保存并退出。我无法做任何这些事情。任何人都可以用外行的方式解释,如何处理这个问题?

顺便说一句,我特别在谈论命令,git rebase -i branch模式如下所示:

在此处输入图像描述

0 投票
1 回答
337 浏览

git - 自定义 Git *Rebase* 提交消息模板

所以,我知道如何为 git 设置自定义提交消息模板。

但是,当我进行交互式 rebase 并使用 reword 或 squash 时,我也希望能够为这些提交设置自定义消息模板。

到目前为止,我还没有找到如何做到这一点。