的在下面的例子中樹:Git的 - 如何找到第一次提交特定分支
A-B-C-D-E (master branch)
\
F-G-H (xxx branch)
我正在尋找的F - 在XXX分支的第一個承諾。我認爲這是可能的:
git log xxx --not master
和列出的最後提交應該是F.它是正確的解決方案也許有它的一些缺點?
我知道在stackoverflow上有類似的問題,但沒有人提出這樣的解決方案,我不知道如果我做對了。
的在下面的例子中樹:Git的 - 如何找到第一次提交特定分支
A-B-C-D-E (master branch)
\
F-G-H (xxx branch)
我正在尋找的F - 在XXX分支的第一個承諾。我認爲這是可能的:
git log xxx --not master
和列出的最後提交應該是F.它是正確的解決方案也許有它的一些缺點?
我知道在stackoverflow上有類似的問題,但沒有人提出這樣的解決方案,我不知道如果我做對了。
git rev-list --ancestry-path $(git merge-base master xxx)..xxx | tail -1
的可能重複在我的回購顯示自從最後一次合併到master到分支xxx之後的第一次提交,而不是分支xxx的第一次提交。 – jk7
git log master..branch --oneline | tail -1
點 - 點給你所有的分支有主沒有提交的。 tail -1
返回前一個輸出的最後一行。
您應該使用merge-base
功能,其目的是準確地解決這個問題:
git merge-base remotes/origin/<branch> develop
如果您的分行(舊)再次合併回主人不給期待已result.I使用python腳本找到初始分支提交ID。
git的轉速名單--first父變更
--first父母遵循只有第一父提交見狀合併提交。
從上面的命令迭代變更集,直到發現父分支。
def status_check(exec_command, exec_dir=None, background=False):
if exec_dir:
os.chdir(exec_dir)
res = subprocess.Popen(exec_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if not background:
result = res.communicate()
return result
def findNewBranchCommits(changeset=None):
cmd = "git rev-list --first-parent "+ changeset
rev_list = status_check(cmd,self.module_dir)
rev_list = str(rev_list[0]).split('\n')
rev_list = list(filter(None, rev_list))
for x in rev_list: # Iterate until branch base point
rev_cmd = "git branch --contains " + x
rev_cmd = status_check(rev_cmd,self.module_dir)
rev_cmd = str(rev_cmd[0]).split('\n')
if(len(rev_cmd) > 2):
print "First Commit in xxx branch",x
break
findNewBranchCommits(changeset)
http://stackoverflow.com/questions/6058308/in-git-how-can-i-find-the-revision-at-which-a-branch-was-created – nyzm