说我有提交
bb8d6cc3c7
aa213lk321
f0j9123r9j
我想为每个人做一个互动的rebase。我能想到的唯一方法是为每个提交键入git rebase -i 'commit_hash'
并逐个执行rebase。
是否有一种更简单的方法可以同时进行全部折扣,smt。喜欢
git rebase -i 'commit_hash_1' 'commit_hash_2' 'commit_hash_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
中有一系列提交。
my-branch
)my-branch-base
)在此范围内,有一些提交需要编辑:
也许它们来自文件,或者它们来自命令(例如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的哈希值包含j
和k
的非十六进制数字,因此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
开始变基并停止标记的提交。