문제
아직 원격 저장소에 푸시되지 않은 로컬 커밋을 어떻게 볼 수 있나요?가끔, 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 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 리포지토리를 한 번의 패스로 확인하기 위해이 스크립트를 코딩했으며, 누가 헌신하지 않았으며 누가 밀고 나가지 않았는지 보여줍니다.
여기 샘플 결과
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
커밋 요약을 제공합니다.