2014-07-01 1 views
10

나는 다음과 같은 작업을 수행하는 bash는 스크립트를 만들었습니다git merge-base로 빨리 감기 병합을 수행 할 수 있는지 확인하는 올바른 방법은 무엇입니까?

  1. 상류에서 변화를 가져 오기를;
  2. 빨리 감기 병합이 가능한지 확인하십시오.
  3. # 2가 참이면 origin/mastermaster으로 병합하십시오.
  4. # 2는 다음과 같이

코드가 false 인 경우 origin/master 위에

  • Rebase 현재 master :

    #!/bin/sh 
    
    local_branch=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD) 
    remote_branch=$(git rev-parse --abbrev-ref --symbolic-full-name @{u}) 
    remote=$(git config branch.$local_branch.remote) 
    
    echo "Fetching from $remote..." 
    git fetch $remote 
    
    if git merge-base --is-ancestor $local_branch $remote_branch; then 
        echo 'Fast-forward is possible. Merging...' 
        git merge --ff-only $remote_branch 
    else 
        echo 'Fast-forward is not possible. Rebasing...' 
        git rebase --preserve-merges $remote_branch 
    fi 
    

    내가 그것을 몇 번 테스트가 작동하는 것 같다,하지만 난 아니에요 git merge-base 부분에 대해 매우 자신감을 가지고 있습니다. 나는 빨리 감기 병합의 이론을 안다. 그리고 merge-base에 대한 논증으로 masterorigin/master을 사용하는 것이 옳은 것처럼 보이지만 나는 힘내 전문가는 아니다.

    그래서 묻습니다 : 가져 오기가 수행 된 직후에 빨리 감기 병합이 가능한지 확인하는 올바른 방법입니까?

  • +0

    왜 항상 rebase하지 않습니까? 가능한 경우 Rebase가 앞으로 감기가됩니다. –

    +0

    @ LucasTrzesniewski 제 테스트에서 빨리 감기 병합을 수행하는 것이 리베이스보다 훨씬 빠르다는 것을 보여주었습니다. 따라서 빨리 감기 병합이 불가능할 때만 리베이스해야합니다. –

    +1

    왜 항상 git merge --ff-only와 rebase가 실패 할 때만합니까? – nert

    답변

    2

    실제로 병합을 수행하면 확실하게 알 수 있습니다! 임시 지점을 사용하면 다른 지점에서 아무 것도 망치지 않습니다.

    git fetch 
    git checkout -b tmp_branch master 
    git merge origin/master 
    

    스크립트는 여기에서 병합 결과를 평가하고 origin/master를 master로 병합해야합니다.

    그리고 필요할 때 임시 분기를 제거하십시오.

    git branch -D tmp_branch 
    
    +1

    답변 해 주셔서 감사합니다. 일할 수도 있지만,'merge-base'는 두 커밋 사이의 병합베이스를 계산하는 것만으로 즉각적인 답을 줄 수 있기 때문에보다 직관적입니다. –

    2

    $remote_branch$local_branch의 조상 인 경우 명령이 확인은 다음과 같습니다이 $remote_branch에 있지만 $local_branch 모든 커밋을 나열

    test -z "$(git rev-list --max-count 1 $local_branch..$remote_branch)" 
    

    --max-count 1없이. 어쨌든 커밋이 있고 출력을 버리는 경우에만 관심이 있으니 --max-count 1을 추가하면 약간 속도가 빨라집니다.

    1

    예, 귀하의 수표가 완벽하게 정확합니다. 거기에는 정말로 수수께끼가 없습니다.

    관련 문제