문제

아직 원격 저장소에 푸시되지 않은 로컬 커밋을 어떻게 볼 수 있나요?가끔, git status 내 브랜치가 X보다 먼저 커밋된다는 것을 인쇄합니다. origin/master, 그러나 항상 그런 것은 아닙니다.

이것은 Git 설치 시 발생하는 버그입니까, 아니면 뭔가 빠진 것입니까?

도움이 되었습니까?

해결책

git log origin/master..HEAD

동일한 구문을 사용하여 Diff를 볼 수도 있습니다.

git diff origin/master..HEAD

다른 팁

아직 밀지 않은 모든 지점에서 모든 커밋을보고 싶다면 다음과 같은 것을 찾고있을 수 있습니다.

git log --branches --not --remotes

그리고 각 지점에서 가장 최근의 커밋과 지점 이름 만보고 싶다면 다음과 같습니다.

git log --branches --not --remotes --simplify-by-decoration --decorate --oneline

당신은 당신이 로컬로 가지고 있지만 상류로하지 않는 모든 커밋을 보여줄 수 있습니다.

git log @{u}..

@{u} 또는 @{upstream} 현재 지점의 상류 분기를 의미합니다 ( git rev-parse --help 또는 git help revisions 자세한 내용은).

이것은 나를 위해 효과가있었습니다.

git cherry -v 

표시된대로 git : 다른 지점에없는 모든 커밋 또는 커밋을 참조하십시오..

당신은 이것을 할 수 있습니다 git log:

git log origin..

그것을 가정합니다 origin 업스트림의 이름이며, 수정 이름을 남기고 있습니다. .. 암시합니다 HEAD, 밀어지지 않은 새로운 커밋을 나열합니다.

피쉬가없는 커밋을 찾기위한 편리한 git 별칭 현재의 나뭇가지:

alias unpushed = !GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline

이것이 기본적으로하는 일 :

git log origin/branch..branch

또한 현재 지점 이름을 결정합니다.

다른 모든 답변은 "업스트림"(풀 지점)에 대해 이야기합니다.
하지만 현지 지점 ~할 수 있다 푸시다른 그것이 끌어오는 것보다 가지.

master 원격 추적 지점으로 푸시되지 않을 수 있습니다."origin/master".
그만큼 상류 분기 master 아마도 origin/master, 하지만 원격 추적 분기로 푸시할 수 있습니다. origin/xxx 또는 anotherUpstreamRepo/yyy.
그것들은 다음에 의해 설정됩니다 branch.*.pushremote 현재 지점에 대해 global remote.pushDefault 값.

그것은 저것 푸시되지 않은 커밋을 찾을 때 계산되는 원격 추적 분기:추적하는 사람 branch at the remote 어디에 현지 지점 으로 밀려날 것입니다.
그만큼 branch at the remote 다시 말하지만, origin/xxx 또는 anotherUpstreamRepo/yyy.

Git 2.5+(2015년 2분기)에는 이에 대한 새로운 단축키가 도입되었습니다. <branch>@{push}

보다 29bc885를 커밋하다, 3dbe9db 커밋, adfe5d0 커밋, 커밋 48c5847, a1ad0eb 커밋, e291c75 커밋, 979cb24를 커밋합니다., 1ca41a1 커밋, 3a429d0 커밋, a9f9f8c를 커밋하다, 8770e6f 커밋, da66b27 커밋, f052154 커밋, 커밋 9e3751d, ee2499f 커밋 [모두 2015년 5월 21일부터] 및 e41bf35 커밋 [2015년 5월 1일] 제프 킹(peff).
(병합자: 주니오 C 하마노 -- gitster -- ~에 c4a8354 커밋, 2015년 6월 5일)

adfe5d0 커밋 설명합니다:

sha1_name:구현하다 @{push} 속기

삼각형 작업 흐름에서 각 분기에는 두 가지 뚜렷한 관심 지점이 있을 수 있습니다.그만큼 @{upstream} 일반적으로 당기는 목적지와 일반적으로 밀어가는 목적지입니다.후자에 대한 속기는 없지만 가지고 있으면 유용합니다.

예를 들어, 어떤 커밋을 하지 않았는지 알고 싶을 수 있습니다 아직 밀려:

git log @{push}..

또는 좀 더 복잡한 예로, 일반적으로 다음에서 변경 사항을 가져오는 경우를 생각해 보세요. origin/master (귀하가 설정한 @{upstream}), 변경 사항을 개인 포크에 푸시합니다(예: myfork/topic).
여러 머신에서 포크로 푸시할 수 있으므로 다음을 수행해야 합니다. 업스트림이 아닌 푸시 대상의 변경 사항을 통합합니다..
이 패치를 사용하면 다음을 수행할 수 있습니다.

git rebase @{push}

이름을 직접 입력하는 것보다

29bc885 커밋 다음을 추가합니다:

for-each-ref:수용하다 "%(push)" 형식

우리가 그랬던 것처럼 "%(upstream)"를 신고합니다"@{upstream}" 각 심판에 대해 이 패치는 "%(push)"맞추다"@{push}".
업스트림과 동일한 추적 형식 수정자를 지원합니다(왜냐하면 예를 들어 어떤 브랜치에 푸시할 커밋이 있는지 알고 싶을 수도 있습니다.).

로컬 브랜치의 커밋 수를 확인하려면 앞/뒤 푸시하려는 지점과 비교하면 다음과 같습니다.

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

당신은 시도 할 수 있습니다 ....

gitk

나는 그것이 순수한 명령 줄 옵션이 아니라는 것을 알고 있지만, 당신이 그것을 설치하고 GUI 시스템에 있다면, 당신이 찾고있는 것을 정확히 볼 수있는 좋은 방법입니다.

(나는 지금까지 아무도 그것을 언급하지 않았다.)

git branch -v 각 지역 지점에 대해 "앞서"여부에 관계없이 표시됩니다.

다음 별칭을 사용하여 커밋되었지만 푸시되지 않은 파일 목록 (및 현재 지점)을 얻습니다.

git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"

그럼 그냥 :

git unpushed

나는 어느 지점이나 원격이나 로컬로도 밀지 않았고, 이전에 커밋을했다. 그냥 커밋. 다른 답변의 어떤 것도 나에게도 효과가 있었지만 다음과 같습니다.

git reflog

거기에서 나는 내 커밋을 찾았다.

나는 이것을하는 가장 일반적인 방법은 다음과 같은 것을 실행하는 것입니다.

git cherry --abbrev=7 -v @{upstream}

그러나 나는 개인적으로 달리기를 선호합니다.

git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..

커밋을 보여줍니다 모두 상류로 병합되지 않은 가지, 또한 업스트림의 마지막 커밋 (다른 모든 커밋에 대한 루트 노드로 표시). 나는 그것을 너무 자주 사용하여 별명을 만들었습니다. noup 그것을 위해.

git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'

버그가 아닙니다. 아마도 보는 것은 리모컨의 변경 사항이 가져 오지만 아직 병합되지 않은 Auto-Merge가 실패한 후 GIT 상태입니다.

로컬 리포와 리모컨 사이의 커밋을 보려면 다음을 수행합니다.

git fetch

이것은 100% 안전하며 작업 사본을 조롱하지 않습니다. 변경이 있었다면 git status 윌 쇼 X commits ahead of origin/master.

이제 리모컨에 있지만 로컬에는없는 커밋 로그를 표시 할 수 있습니다.

git log HEAD..origin

스크립트를 보러 가십시오 https://github.com/badele/gitcheck, 나는 모든 git 리포지토리를 한 번의 패스로 확인하기 위해이 스크립트를 코딩했으며, 누가 헌신하지 않았으며 누가 밀고 나가지 않았는지 보여줍니다.

여기 샘플 결과 enter image description here

git cherry -v

이것은 해당 메시지와 함께 로컬 댓글 기록 (아직 누르지 않음)을 나열합니다.

도구라는 도구가 있습니다 비적되지 않았다 지정된 작업 디렉토리에서 모든 Git, Mercurial 및 Subversion Repos를 스캔하고 UCMPTIENT 파일 및 UNPINGED COMMIT의 목록을 표시합니다. 설치는 Linux에서 간단합니다.

$ easy_install --user unpushed

또는

$ sudo easy_install unpushed

시스템 전체에 설치합니다.

사용법도 간단합니다.

$ unpushed ~/workspace
* /home/nailgun/workspace/unpushed uncommitted (Git)
* /home/nailgun/workspace/unpushed:master unpushed (Git)
* /home/nailgun/workspace/python:new-syntax unpushed (Git)

보다 unpushed --help 또는 공식 설명 자세한 내용은. Cronjob 스크립트도 있습니다 unpushed-notify 비응을받지 않고 완공되지 않은 변경 사항에 대한 화면 통지.

이것은 나에게 더 잘 작동했습니다.

git log --oneline @{upstream}..

또는:

git log --oneline origin/(remotebranch)..

유사 : 무너지지 않은 가지를 보려면 :

git branch --all --no-merged

그것들은 의심 할 수 있지만 CXREG의 답변을 추천합니다.

모든 미개한 커밋을 나열합니다 모든 지점에서 이 명령을 쉽게 사용할 수 있습니다.

 git log --branches  @{u}..

밀리지 않은 커밋 횟수가 단일 자릿수 인 경우 가장 쉬운 방법은 다음과 같습니다.

$ git checkout

Git은 당신이 당신의 기원을 상대적으로 "앞서 언급한다"고 말함으로써 응답합니다. 이제 로그를 볼 때 그 숫자를 명심하십시오. 당신이 "3 번의 커밋"을 앞두고 있다면, 역사상 상위 3 위는 여전히 비공개입니다.

일을하는 한 가지 방법은 한 가지에서 사용할 수있는 커밋을 나열하는 것입니다.

git log ^origin/master master

다음은 내 휴대용 솔루션 (추가 설치없이 Windows에서도 작동하는 쉘 스크립트)입니다. 모든 분기의 원점과의 차이점을 보여줍니다. git-fetch-log

예제 출력 :

==== branch [behind 1]

> commit 652b883 (origin/branch)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-10 09:11:11 +0100
|
|     Commit on remote
|
o commit 2304667 (branch)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-08-28 13:21:13 +0200

      Commit on local

==== master [ahead 1]

< commit 280ccf8 (master)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 21:42:55 +0100
|
|     Commit on local
|
o commit 2369465 (origin/master, origin/HEAD)
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2016-03-10 09:02:52 +0100

      Commit on remote

==== test [ahead 1, behind 1]

< commit 83a3161 (test)
| Author: BimbaLaszlo <bimbalaszlo@gmail.com>
| Date:   2016-03-25 22:50:00 +0100
|
|     Diverged from remote
|
| > commit 4aafec7 (origin/test)
|/  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
|   Date:   2016-03-14 10:34:28 +0100
|
|       Pushed remote
|
o commit 0fccef3
  Author: BimbaLaszlo <bimbalaszlo@gmail.com>
  Date:   2015-09-03 10:33:39 +0200

      Last common commit

로그에 전달 된 매개 변수, 예를 들어 --oneline 또는 --patch 사용할 수 있습니다.

git show

지역 커밋의 모든 차이를 보여줄 것입니다.

git show --name-only

로컬 커밋 ID와 Commit의 이름을 표시합니다.

git diff origin

지점이 원점을 추적하도록 설정되었다고 가정하면 차이점을 보여줄 것입니다.

git log origin

커밋 요약을 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top