2013-08-23 11 views
39

のコミットを見つける方法:私はFを探していますGitの - 最初の例ツリー以下では特定のブランチ

A-B-C-D-E (master branch) 
    \ 
    F-G-H (xxx branch) 

- 最初のxxxのブランチにコミットします。私はそれが可能であることを考える:

git log xxx --not master 

と記載されている最後はF.はそれが正解ですか多分それのいくつかの欠点があるべきであるコミット?

私はstackoverflowに関して同様の質問があることを知っていますが、誰もそのような解決策を提案していません。

+0

http://stackoverflow.com/questions/6058308/in-git-how-can-i-find-the-revision-at-which-a-branch-was-created – nyzm

答えて

-3

git rev-list --ancestry-path $(git merge-base master xxx)..xxx | tail -1

+0

での可能性の重複私のrepoこれは、ブランチxxxの最初のコミットではなく、ブランチxxxへのマスターからの最後のマージ以降の最初のコミットを示しています。 – jk7

45
git log master..branch --oneline | tail -1 

ドットドットは、分岐がマスターが持っていないことを持っていることをあなたにコミットのすべてを提供します。 tail -1は前の出力から最後の行を返します。

+2

これは 'branch''が存在する場合にのみ機能します。ブランチが削除された場合はどうしますか? – Oz123

+1

@ Oz123ブランチは、HEADやsha1やタグのようなrefで置き換えることができます。しかし、明らかに何らかの参考資料が必要です。 – Zitrax

+2

私が期待していたものを私に与えてくれません。私のブランチ(古いもの)は既にmasterにマージされています。つまり、xxxのコミットはすべて既にマスターになっています。それでも、私はそのコミットメントがそのブランチの最初のものか、実際にはそのブランチのコミットの履歴だけを調べる必要があるのか​​を知る必要があります。彼らがマスターであるかどうかは気にしません。 –

0

あなたはまさにこの問題を解決するために設計されてmerge-base機能を使用する必要がありますあなたのブランチ(1歳)が、再びマスタにマージされている場合

git merge-base remotes/origin/<branch> develop 
0

は、期待result.Iは、Pythonスクリプトを使用しているものではありません最初のブランチコミットIDを見つける。

GitのREV-リスト--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) 
関連する問題