에서 새 브랜치 my_experiment
를 master
만들고 여러 커밋을 했다고 가정 해 보겠습니다 my_experiment
. git log
when 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/^[^\[]*?\[/[/"
.