마스터와 브랜치 사이의 앞 / 뒤 정보?


201

내 지역의 repo (에서 테스트하기위한 지점을 만든 test-branch내가 푸시) Github.

Github계정으로 이동하여 이것을 선택 test-branch하면 정보가 표시됩니다.

This branch is 1 commit ahead and 2 commits behind master

내 질문은 :

  1. 이 정보를 로컬로 표시하려면 어떻게해야합니까 (예 : 정보 Github를보기 위해 열지 않고 터미널에 표시하는 명령 )?
  2. 나는 다음을 사용하여 분기 사이의 차이점을 볼 수 있음을 알고 있습니다.

    git diff master..test-branch
    

    또는 Meld(내가 선호하는) 사용 :

    git difftool master..test-branch
    

    거기에 볼 수있는 방법입니다하지만 만약 궁금 해서요 앞을 하고 뒤에 따로 커밋합니다. IE : 1 커밋을 미리 보여준 다음 2 커밋 을 스스로 보여줄 수있는 방법이 있습니까?



1
Git 2.5 이상 (2015 년 2 분기)에을 소개 git for-each-ref --format="%(push:track)" refs/heads합니다. 아래 답변을
VonC

1
내가 쓰려고하는 키워드를 사용하여이 질문을 찾을 수 없었기 때문에, 이것은이 지점을 구성하는 커밋 세트 사이의 상대적인 보완 (또는 "차이") 을 취하는 것에 유의하고 싶습니다. 그런 다음 요소 계산). 바라건대 이것은 검색 엔진 색인으로 만듭니다.
pmos

답변:


309

다음은 두 가지를 비교하고 각 분기가 다른 분기보다 얼마나 많은 커밋을 수행하는지 보여주는 트릭입니다 (질문 1에 대한보다 일반적인 답변).

대한 지역 지점 : git rev-list --left-right --count master...test-branch

대한 원격 지사 : git rev-list --left-right --count origin/master...origin/test-branch

결과는 다음과 같습니다.

1 7

이 출력 수단 "비교는 master, test-branch7 커밋 앞서이며, 1 뒤에 커밋합니다."

또한 로컬 브랜치를 원격 브랜치와 비교할 수 있습니다 (예 : origin/master...master로컬 master브랜치가 해당 원격 브랜치보다 앞 / 뒤에있는 커밋 수 확인) .


1
이것은 내가 브랜치를 삭제할 수 있는지 또는 여전히 개발보다 앞서 있는지 확인할 수있는 훌륭한 솔루션입니다.
Maverick1st

1
다음과 같은 경우 Maverick1st @, 그래,이 명령은 특히 유용 gitflow 워크 플로우 (내가)
user1834095

2
git rev-list --left-right --count origin/master...@사용자가 git fetch이전에 제공 한 경우 현재 기능 분기가 원격 마스터 ( ) 뒤에 있는지 확인하는 유스 케이스에 가장 적합합니다 . 오래된 브랜치에서 풀 요청을 방지하는 데 유용합니다.
jakub.g

9
얼마나 많은 커밋을 확인하려면 뒤에 것은 현재의 지점입니다 :git rev-list --left-right --count origin/master...@ | cut -f1
jakub.g

8
@ jakub.g 당신은 당신이 사용하는 경우 절단 할 필요가 없습니다 --left-only또는--right-only
jasonkarns

39

먼저 로컬에 얼마나 많은 수정본이 git fetch있는지 확인하려면 리모컨의 최신 정보를 가지고 있는지 확인해야합니다.

기본 출력 git status은 앞뒤로 몇 개의 수정본이 있는지 알려주지 만 일반적으로 너무 자세합니다.

$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 2 and 1 different commit each, respectively.
#
nothing to commit (working directory clean)

나는 선호한다 git status -sb:

$ git status -sb
## master...origin/master [ahead 2, behind 1]

사실 나는 이것을 간단히 git s로 지정하고 이것이 상태 확인에 사용하는 주요 명령입니다.

의 "앞서 개정"에서 차이점을 확인하기 위해 다음 master에서 "뒤에서 개정"을 제외 할 수 있습니다 origin/master.

git diff master..origin/master^

의 "개정판 뒤"에서 차이점을 확인하기 위해 다음 origin/master에서 "미리 개정"을 제외 할 수 있습니다 master.

git diff origin/master..master^^

앞뒤에 5 개의 개정이있는 경우 다음과 같이 작성하는 것이 더 쉬울 수 있습니다.

git diff master..origin/master~5
git diff origin/master..master~5

최신 정보

앞 / 뒤 수정본을 보려면 다른 지점을 추적하도록 지점을 구성해야합니다. 나에게 이것은 원격 저장소를 복제 할 때와로 분기를 푸시 한 후의 기본 동작입니다 git push -u remotename branchname. 내 버전은 1.8.4.3이지만 내가 기억하는 한 이런 식으로 작동하고 있습니다.

버전 1.8부터 다음과 같이 추적 분기를 설정할 수 있습니다.

git branch --track test-branch

버전 1.7부터는 구문이 다릅니다.

git branch --set-upstream test-branch

어떤 버전 git을 사용하고 있습니까? git status또는로 얻은 것을 재현 할 수 없습니다 git status -sb. 두 가지 명령을 시도하면 (수행 후 git fetch) 커밋에 대한 정보를 얻지 못합니다.
Gabriel

8
앞과 뒤에 커밋을 볼 수 귀하의 방법을 적용 master하고 origin/master난에 대한 그 차이점을보고 싶어 master하고, 또 다른 지점 test-branch. 이 문제를 해결하기 위해 답을 다시 작성할 수 있습니까?
Gabriel

"뒤에"및 "앞에"개정의 차이는 분기 이름 사이에 3 개의 점을 사용하는 경우에만 작동합니다 (2 아님). 그리고 ^와 ^^는 여기서 중요하지 않은 것 같습니다. 예 : git diff master ... origin / master git diff origin / master ... master 어쨌든 "git status -sb"는 매우 도움이되었습니다.
Vituel

10

Git 2.5 이상에서는 이제 분기로 푸시하도록 구성된 모든 분기에 대해 앞 / 뒤를 볼 수있는 또 다른 옵션이 있습니다.

git for-each-ref --format="%(push:track)" refs/heads

"더 많은 참조 보기 Unpushed 힘내 커밋 "


현재 지점과 원격 추적 지점에 대해서만이 작업을 수행 할 수 있습니까?
spex

@spex yes : refs/heads현재 지점의 이름으로 완료 합니다 ( stackoverflow.com/a/12142066/6309 ) :refs/heads/$(git rev-parse --abbrev-ref HEAD)
VonC

3

awk조금 더 예쁘게 만드는 데 사용할 수도 있습니다 .

git rev-list --left-right --count  origin/develop...feature-branch | awk '{print "Behind "$1" - Ahead "$2""}'

항상 원점을 먼저 가져온 다음 분기를 비교하는 별칭을 만들 수도 있습니다.

commit-diff = !"git fetch &> /dev/null && git rev-list --left-right --count"

1

git fetch를 수행 한 후 git status를 실행하여 로컬 브랜치의 브랜치 원격 버전보다 앞뒤에있는 커밋 수를 표시 할 수 있습니다.

이것은 다른 브랜치보다 앞뒤에 얼마나 많은 커밋이 있는지 보여주지 않습니다. 옵션은 전체 diff, github를 보거나 위에 링크 된 Vimhsa와 같은 솔루션을 사용하는 것입니다 : 모든 리포지토리의 Git 상태

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.