카테고리 보관물: Git

Git

단 하나의 지점에 대한 커밋 기록을 얻는 방법? my_experiment를

에서 새 브랜치 my_experimentmaster만들고 여러 커밋을 했다고 가정 해 보겠습니다 my_experiment. git logwhen on을 수행하면 my_experiment이 분기에 대한 커밋뿐만 아니라 분기가 생성 master되기 전에 이루어진 커밋도 볼 수 있습니다 my_experiments.

my_experiments지점의 생성에 도달 할 때까지 지점 에 대한 모든 커밋의 기록을 보는 것이 매우 유용합니다. 사실상 그 지점의 진정한 기록입니다. 그렇지 않으면 커밋이 my_experiments브랜치에 있었는지 여부를 로그를 살펴볼 때 명확 하지 않습니다.

Git으로 이것을 할 수있는 방법이 있습니까?



답변

범위 를 사용하여 그렇게 할 수 있습니다 .

git log master..

my_experiment지점을 체크 아웃 한 경우 곳 비교합니다 master에에있다 HEAD(끝 my_experiment).


답변

git merge-base명령은 공통 조상을 찾는 데 사용할 수 있습니다. 따라서 my_experiment가 아직 마스터로 병합되지 않고 my_experiment가 마스터에서 작성된 경우 다음을 수행 할 수 있습니다.

git log --oneline `git merge-base my_experiment master`..my_experiment


답변

참고 : 해당 로그를 마지막 n 커밋 (예 : git log -3과 같은 마지막 3 커밋)으로 제한하는 경우 ‘n’과 분기 사이에 공백을 두어야합니다.

git log -3 master..

Git 2.1 (2014 년 8 월) 이전에는이 ​​실수 : git log -3master..실제로 현재 분기의 마지막 3 개의 커밋 (여기서는 my_experiment)을 무시하고 master한계를 무시합니다 ( my_experiment커밋이 하나만 포함되어 있으면 3 개가 나열되고 그 중 2 개가 있음 master)

참조 e3fa568 커밋 에 의해 (Junio C 하마노 gitster) :

개정 : ” git log -<count>“를보다 신중하게 구문 분석

이 잘못 입력 된 명령 행은 단순히 ” master” 를 무시 하고 현재로부터의 커밋 두 개를 표시합니다 HEAD.

$ git log -2master

전체 문자열을 정수로 파싱하지 않고 ” 2master“를 공급하기 때문 atoi()입니다.

strtol_i()대신 도우미 기능을 사용하십시오 .


답변

당신은 사용할 수 있습니다 git log --oneline


답변

귀하의 목적에 맞는 옵션은 git log --online --decorate입니다. 이를 통해 확인 된 커밋과 스토리 라인에있는 각 분기에 대한 맨 위 커밋을 알 수 있습니다. 이렇게하면 리포의 구조와 특정 분기와 관련된 커밋을 잘 볼 수 있습니다. 나는 이것을 읽는 것이 도움 될 것이라고 생각 합니다.


답변

나는 이것이 매우 늦다는 것을 알고 있습니다 … 그러나 여기에 당신이 찾고있는 것을 얻을 수있는 (간결하지 않은) oneliner가 있습니다 :

git show-branch --all 2>/dev/null | grep -E "\[$(git branch | grep -E '^\*' | awk '{ printf $2 }')" | tail -n+2 | sed -E "s/^[^\[]*?\[/[/"
  • 우리는 git show-branch(경고를 보내기) 로 지점 이름과 상대 위치가있는 커밋을 실제 지점 상태에 나열 /dev/null합니다.
  • 그런 다음 브랜치 안에 분기 이름을 가진 것들만로 유지하십시오 grep -E "\[$BRANCH_NAME".
  • (별이있는 분기, 별이없는 에코)를 사용하여 실제 $BRANCH_NAME를 얻을 수 git branch | grep -E '^\*' | awk '{ printf $2 }'있습니다.
  • 결과에서로 시작하는 중복 라인을 제거합니다 tail -n+2.
  • 그리고, 우리는 fianlly 모든 이전 제거하여 출력을 정리 [$BRANCH_NAME]로를 sed -E "s/^[^\[]*?\[/[/".

답변