假设我有提交
aa213lk321
f0j9123r9j
我想为每个提交做一个交互式的重定基,我能想到的唯一方法是为每个提交输入git rebase -i 'commit_hash',然后一个接一个地重定基。有没有一种更简单的方法可以一次全部重定基,比如git rebase -i 'commit_hash_1' 'commit_hash_2' 'commit_hash_3'?
git rebase -i 'commit_hash'
git rebase -i 'commit_hash_1' 'commit_hash_2' 'commit_hash_3'
jv4diomz1#
这是您要压缩的提交的列表。
1. bb8d6cc3c7 <- This is the HEAD or latest commit 2. aa213lk321 3. f0j9123r9j
命令
git rebase -i HEAD~3,如果以上三个提交都按顺序提交然后你需要输入pick bb8d6cc3c7并压缩另外两个提交,这意味着压缩。如果提交不是按顺序进行的,那么就执行git rebase -i,这将打开一个编辑器,你可以选择一个提交并挤压另外两个提交。
git rebase -i HEAD~3
pick bb8d6cc3c7
git rebase -i
rpppsulh2#
假设我们在一个名为my-branch-base的修订版本(即分支或标记)之上的分支my-branch中有一系列提交。
my-branch-base
my-branch
在此范围内,有一些提交需要编辑:
git log -G"MyFunction"
复制分支HEAD pre rebase
git log
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启动的编辑器中--使用修订选择命令的输出或要编辑的散列文件。在活力你可以做
git rebase
my-branch-prerebase
HEAD
:vsplit :enew :r !git log --oneline -G"MyFunction" my-branch-prerebase
将(生成的)修订列表更改为编辑器可用作表达式以选择要编辑的行的格式。在vim中,您可以(在右侧窗口中)
\x
j
k
\w
git log --oneline
{9,10}
:%s/\v(\x{7,9}).*\n/\1|/
\n将这些行连接为一行。在vim中,我们将其复制到一个寄存器中,然后通过CTRL+r将其粘贴到minibuffer中。返回缓冲区并执行重定基操作。在与所选提交哈希匹配的行上搜索并将“pick”替换为“edit”。体内:
\n
:g/\vbb8d6cc3c7|aa213lk321|f0j9123r9j/ :s/pick/edit/
保存重定基操作列表,并丢弃包含所选提交哈希的临时缓冲区。关闭编辑器。git rebase开始重定基,并在标记的提交处停止。
y53ybaqx3#
好吧,如果你有master分支和some-feature分支。如果有人更新了master分支,而您想要重定some-feature分支的基,...只是
master
some-feature
git checkout some-feature git rebase -i master
所有some-feature的提交都合并到master分支
3条答案
按热度按时间jv4diomz1#
这是您要压缩的提交的列表。
命令
git rebase -i HEAD~3
,如果以上三个提交都按顺序提交然后你需要输入
pick bb8d6cc3c7
并压缩另外两个提交,这意味着压缩。如果提交不是按顺序进行的,那么就执行
git rebase -i
,这将打开一个编辑器,你可以选择一个提交并挤压另外两个提交。rpppsulh2#
假设我们在一个名为
my-branch-base
的修订版本(即分支或标记)之上的分支my-branch
中有一系列提交。*八度六度三度七度
*氨基酸213 lk 321
*编号9123 r9 j
my-branch-base
)在此范围内,有一些提交需要编辑:
git log -G"MyFunction"
)。我将展示如何通过命令选择它们。*复制分支HEAD pre rebase
git log
编辑提交,git需要在rebase过程中引用它们)*:然后开始变基:
使用以下命令打开配置的编辑器:
选择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
不会选择任何适用的提交哈希。将(生成的)修订列表更改为编辑器可用作表达式以选择要编辑的行的格式。
在vim中,您可以(在右侧窗口中)
\x
选择十六进制数字,而OP的散列包含非十六进制数字,如j
和k
,因此OP可能需要\w
;并且,在我的情况下git log --oneline
产生9位数的哈希缩写,您可能需要不同的长度(虚构的示例需要{9,10}
*:\n
将这些行连接为一行。在vim中,我们将其复制到一个寄存器中,然后通过CTRL+r将其粘贴到minibuffer中。
返回缓冲区并执行重定基操作。在与所选提交哈希匹配的行上搜索并将“pick”替换为“edit”。
体内:
保存重定基操作列表,并丢弃包含所选提交哈希的临时缓冲区。关闭编辑器。
git rebase
开始重定基,并在标记的提交处停止。y53ybaqx3#
好吧,如果你有
master
分支和some-feature
分支。如果有人更新了
master
分支,而您想要重定some-feature
分支的基,...只是
所有
some-feature
的提交都合并到master分支