如何重新提交提交列表?

时间:2017-06-13 09:19:46

标签: git rebase

说我有提交

  • bb8d6cc3c7
  • aa213lk321
  • f0j9123r9j

我想为每个人做一个互动的rebase。我能想到的唯一方法是为每个提交键入git rebase -i 'commit_hash'并逐个执行rebase。

是否有一种更简单的方法可以同时进行全部折扣,smt。喜欢

git rebase -i 'commit_hash_1' 'commit_hash_2' 'commit_hash_3'

3 个答案:

答案 0 :(得分:1)

这是您要压缩的提交列表。

1. bb8d6cc3c7 <- This is the HEAD or latest commit
2. aa213lk321
3. f0j9123r9j

<强>命令

git rebase -i HEAD~3,如果以上三个提交顺序

然后你需要pick bb8d6cc3c7并输入s来压缩其他两个提交,这意味着壁球。

如果提交不按顺序进行,那么只需执行git rebase -i,这将打开一个编辑器,然后选择一个提交并压缩其他两个提交。

答案 1 :(得分:0)

Weel,如果你有master分支和some-feature分支。

如果有人更新master分支,并且您希望为您some-feature分支,...

只需

git checkout some-feature
git rebase -i master

所有some-feature的提交都合并到主分支

答案 2 :(得分:0)

注意:此答案取决于git rebase打开的文本编辑器的功能。我正在使用vim。

假设在名为my-branch的修订(即分支或标签)的顶部,分支my-branch-base中有一系列提交。

  • a8d737b50(my-branch
  • bb8d6cc3c7
  • 79a2e5cc5
  • fec125378
  • 193cf566b
  • aa213lk321
  • f0j9123r9j
  • ea781de38
  • 61785bd55
  • 04428cafd(my-branch-base

在此范围内,有一些提交需要编辑:

  • bb8d6cc3c7
  • aa213lk321
  • f0j9123r9j

也许它们来自文件,或者它们来自命令(例如git log -G"MyFunction")。我将展示如何通过命令选择它们。

为您的分支机构HEAD预先复制副本
(因为:如果您的rebase无法按预期工作,您将有一个备份;并且,如果您选择通过git log编辑的提交,git在rebase期间需要引用它们)

git branch -c my-branch my-branch-prerebase

然后启动变基:

git rebase --interactive my-branch-base

使用以下命令打开已配置的编辑器:

  

选择a8d737b50 {commit msg}
  选择bb8d6cc3c7 {commit msg}
  选择79a2e5cc5 {commit msg}
  选择fec125378 {commit msg}
  选择193cf566b {commit msg}
  选择aa213lk321 {commit msg}
  选择f0j9123r9j {commit msg}
  选择ea781de38 {commit msg}
  选择61785bd55 {commit msg}

打开第二个缓冲区(在git rebase开头的编辑器中),其中显示修订选择命令的输出或带有要编辑的哈希的文件。
在vim中,您可以做
(请注意,您需要为my-branch-prerebase指定git log,因为HEAD现在指向my-branch-base,而git log不会选择任何适用的提交哈希。)

:hsplit
:enew
:r !git log --oneline -G"MyFunction" my-branch-prerebase

将(生成的)修订列表更改为一种格式,您的编辑器可以将其用作表达式以选择要编辑的行。
在vim中,您可以执行操作(在右侧窗口中)
(注意:\x选择十六进制数字,并且OP的哈希值包含jk的非十六进制数字,因此OP可能需要\w;并且,在我的说法中,git log --oneline产生了9位数的哈希缩写,您可能需要不同的长度(伪造的示例需要{9,10}

:%s/\v(\x{9}).*\n/\1|/

\n将行连接为一行。

在vim中,我们将其复制到寄存器中,然后通过 CTRL + r 粘贴到小型缓冲区中。

使用rebase操作返回到缓冲区。在与所选提交哈希匹配的行上搜索并将“ pick”替换为“ edit”。
在vim中:

:g/\vbb8d6cc3c7|aa213lk321|f0j9123r9j/ :s/pick/edit/

保存rebase操作列表,并丢弃具有选定提交哈希值的临时缓冲区。关闭编辑器。 git rebase开始变基并停止标记的提交。