2012-12-20 4 views
3

자주 "픽스 업!", "스쿼시!" 및 "리베이스 -i"를 사용하여 최근의 unpushed 된 기록을 정리하거나, 수정하거나, 단지 바이올린을 적용 할 수 있습니다. Git이 대화식 리베이스에 가장 적합한 커밋을 자동으로 선택하도록하는 방법을 찾고 싶습니다. 따라서 빠른 대화 형 리베이스를 수행 할 별칭을 정의 할 수 있습니다. 어떤 대화식으로 리베이스 할 최선의 커밋을 자동으로 어떻게 결정합니까?

  • 다른 지점에
  • 은이 둘 이상의 부모가 아닌
  • 을 (로컬 또는 원격)을 표시 :

    내가 가장 하나에 가장 최근의 조상이 될 것 같은 경우에 커밋 생각 부모

첫 번째 조건은 다른 사용자에게 영향을 줄 수있는 커밋을 다시 작성하지 않도록합니다. 두 번째는 병합을 통해 "내버려 두지 않으려는 노력을하지 않습니다. 이는 내가 원하는 바가 아닙니다. 세 번째는 정당성 검사입니다.

그래서 문제는, 어떻게 그 자식이 커밋을 찾을 수 있습니까?

답변

0

이렇게 예쁜 것은 아니지만 이것이 내가 생각해 낸 것입니다.

#! /bin/sh 

commit=$(git rev-parse HEAD) 

while [ "$(git log --format="%p" -1 $commit | wc -w)" -eq 1 ] \ 
     && [ "$(git branch --all --contains $commit | wc -l)" -eq 1 ] 
do 
    commit=$(git rev-parse "$commit^") 
done 

echo $commit 

나는이 작업을보다 간단하고 견고하게 수행 할 수 있다고 확신하지만, 원하는대로 할 것으로 보인다. 제안 및 개선은 대단히 환영합니다. (예를 들어, wc에 의존하는 대신 Git 배관 작업으로이 작업을하는 것이 좋을 것입니다.)

1

찾고자하는 것이 정확하지 않지만 시작 지점을 지정하지 않고 git rebase을 호출하면 대부분의 경우 완벽한 선택 인 업스트림 브랜치에서 리베이스가 시작됩니다. 더 이상 리베이스하면 게시 된 기록을 다시 쓰게되므로 결코 좋은 생각이 아닙니다.

+0

좋은 조언을 드리지만, 이것은 Git 1.7.6의 새로운 기능입니다. 1.7.0과 1.7.5 사이의 버전에서는'git rebase -i @ {upstream}'또는'git rebase -i @ {u}'만으로도 같은 일을 할 수 있습니다. –