git 我如何重定提交列表的基?

chy5wohz  于 2022-12-25  发布在  Git
关注(0)|答案(3)|浏览(162)

假设我有提交

  • 第一个月
  • aa213lk321
  • f0j9123r9j

我想为每个提交做一个交互式的重定基,我能想到的唯一方法是为每个提交输入git rebase -i 'commit_hash',然后一个接一个地重定基。
有没有一种更简单的方法可以一次全部重定基,比如
git rebase -i 'commit_hash_1' 'commit_hash_2' 'commit_hash_3'

jv4diomz

jv4diomz1#

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

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

命令

git rebase -i HEAD~3,如果以上三个提交都按顺序提交
然后你需要输入pick bb8d6cc3c7并压缩另外两个提交,这意味着压缩。
如果提交不是按顺序进行的,那么就执行git rebase -i,这将打开一个编辑器,你可以选择一个提交并挤压另外两个提交。

rpppsulh

rpppsulh2#

  • 注意:这个答案取决于git rebase打开的文本编辑器的功能,我使用的是vim。*

假设我们在一个名为my-branch-base的修订版本(即分支或标记)之上的分支my-branch中有一系列提交。

  • a8 d 737 b50(一米二英寸一英寸)
    *八度六度三度七度
  • 小行星79 a2 e5 cc 5
  • 费克125378
  • 小行星193
    *氨基酸213 lk 321
    *编号9123 r9 j
  • ea781de38
  • 小行星61785
  • 04428cafd(my-branch-base

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

  • 八碳六碳七
  • AA213LK321
  • 编号9123 r9 j
  • 它们可能来自文件,也可能来自命令(例如git log -G"MyFunction")。我将展示如何通过命令选择它们。*

复制分支HEAD pre rebase

  • (因为:你将有一个备份,以防你的变基不工作,因为你的意图;如果你选择通过git log编辑提交,git需要在rebase过程中引用它们)*:
git branch -c my-branch my-branch-prerebase

然后开始变基:

git rebase --interactive my-branch-base

使用以下命令打开配置的编辑器:
选择a8 d 737 b50 {提交消息}
选择bb 8d 6cc 3c 7 {提交消息}
选择79 a2 e5 cc 5 {提交消息}
选择fec 125378 {提交消息}
选择193 cf 566 b {提交消息}
选择aa 213 lk 321 {提交消息}
选择f0 j 9123 r9 j {提交消息}
选择ea 781 de 38 {提交消息}
选择61785 bd 55 {提交消息}
打开第二个缓冲区--在由git rebase启动的编辑器中--使用修订选择命令的输出或要编辑的散列文件。
在活力你可以做

  • (注意,您需要将my-branch-prerebase指定为git log,因为HEAD现在指向my-branch-base,并且git log不会选择任何适用的提交哈希。
:vsplit
: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{7,9}).*\n/\1|/

\n将这些行连接为一行。
在vim中,我们将其复制到一个寄存器中,然后通过CTRL+r将其粘贴到minibuffer中。
返回缓冲区并执行重定基操作。在与所选提交哈希匹配的行上搜索并将“pick”替换为“edit”。
体内:

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

保存重定基操作列表,并丢弃包含所选提交哈希的临时缓冲区。关闭编辑器。git rebase开始重定基,并在标记的提交处停止。

y53ybaqx

y53ybaqx3#

好吧,如果你有master分支和some-feature分支。
如果有人更新了master分支,而您想要重定some-feature分支的基,...
只是

git checkout some-feature
git rebase -i master

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

相关问题