2016-12-26 74 views
2

我想使用git rebase -i HEAD~n来挤压我的提交,但为了这样做,我通常必须执行git log并手动计算所有提交数量,直到下一次未完成的提交。换句话说,我会看到类似这样的东西如何找到最后一次未完成的提交?

commit 89073409kiejroijer 
Author: AlanH 
commit 89073409kiejroijer12903 
Author: AlanH 
... 
commit 89073409kiejroijer83 
Author: AlanH 
commit 890789754239kldjrjsafd 
Author: JohnSmith 

所以我会计算所有的约翰的提交之前。然后做git rebase -i HEAD~n

有没有一种方法可以在一个步骤中做到这一点,这样我就不必算我的提交?

+0

@ {蓝} '而不是HEAD〜N,它会做你想要的自动化。 –

+0

如果你有一个跟踪分支,你甚至不需要它,这是默认的:'git rebase'就可以做到这一点。 – jthill

+0

@AndrewC“u”代表用户名吗?或者你的意思是'@ {u}'? – AlanH

回答

2
git log --author="Adam" --invert-grep -n1 

给人的第一承诺不匹配作者=“亚当”

使用该<commit-id>如果您使用的是跟踪分支只需指定“变基

git rebase -i <commit-id> 
+0

很棒的发现!不会比这更好。可能会添加'--format =%H'来给出提交ID。 – jthill

+0

@jthill所以将整个命令是:'git log --author =“Adam”--invert-grep -n1 --format =%H ' – AlanH

0

使用下面的shell可以解决您的问题。

git log | cat | grep Author | awk -F: "{print $1}" | grep -v "yourname" | wc -l 

此命令计算上次提交之前的提交编号。

然后使用git rebase -i HEAD~n

或者在一个命令中使用这一点。

git log | cat | grep Author | awk -F: "{print $1}" | grep -v "yourname" | wc -l | xargs -I {} git rebase -i HEAD~{} 

希望这对你有所帮助。

0

如何:

git log --format='%H %an' | grep -v Adam | cut -d ' ' -f1 | xargs -n1 git log -1 

哪里Adam是作者的名字即你

1

无需来算,只需要使用你想要的提交ID,在您的例子中,你可以看到它的890789754239kldjrjsafd

为了找到它编程在其他的答案将工作的搜索,我能找到的最简单的搜索

git log --format=%h\ %an|awk '!/ Your Name/{print $1;exit}' 
+0

'n'应该是一个整数,但它如何取得一个提交ID? – AlanH

+0

替换整个事情,无论如何,git只是将'HEAD〜n'翻译成提交ID,直接给它。 – jthill

相关问题