etc./StackOverFlow

푸시되지 않은 Git 커밋 보기

청렴결백한 만능 재주꾼 2021. 12. 4. 10:39
반응형

질문자 :Josh Buhler


원격 리포지토리에 아직 푸시되지 않은 로컬 커밋을 보려면 어떻게 해야 합니까? 때때로 git status origin/master 전에 X 커밋이라고 출력하지만 항상 그런 것은 아닙니다.

이것은 Git 설치의 버그입니까, 아니면 누락된 것이 있습니까?



git log origin/master..HEAD

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

 git diff origin/master..HEAD

Peter B

아직 푸시되지 않은 모든 분기에 대한 모든 커밋을 보려면 다음과 같이 찾을 수 있습니다.

 git log --branches --not --remotes

그리고 각 브랜치의 가장 최근 커밋과 브랜치 이름만 보려면 다음과 같이 하십시오.

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

cxreg

로컬에 있지만 업스트림에는 없는 모든 커밋을 표시할 수 있습니다.

 git log @{u}..

@{u} 또는 @{upstream} 은 현재 분기의 업스트림 분기를 의미합니다(자세한 내용은 git rev-parse --help 또는git help revisions 참조).


Ben Lings

이것은 나를 위해 일했습니다.

 git cherry -v

Git에 표시된 대로 : 푸시되지 않은 모든 커밋 또는 다른 분기에 없는 커밋을 확인합니다 .


Christian Vielma

git log 하여 이 작업을 수행할 수 있습니다.

 git log origin/master..

이것은 origin 이 업스트림 리모트 master 가 업스트림 브랜치의 이름이라고 가정합니다. .. 다음에 개정 이름을 생략하면 푸시되지 않은 새 커밋을 나열하는 HEAD 의미합니다.


Greg Hewgill

다른 모든 답변은 "업스트림"(당신이 가져온 분기)에 대해 이야기합니다.
그러나 로컬 브랜치 는 자신이 가져온 브랜치와 다른 브랜치로 푸시 할 수 있습니다.

master 는 원격 추적 분기 " origin/master "로 푸시하지 않을 수 있습니다.
master 대한 업스트림 분기는 origin/master 일 수 있지만 원격 추적 분기 origin/xxx 또는 anotherUpstreamRepo/yyy 푸시할 수 있습니다.
global remote.pushDefault 값과 함께 현재 분기에 대한 branch.*.pushremote 에 의해 설정됩니다.

푸시되지 않은 커밋을 찾을 때 계산 되는 원격 추적 분기: 로컬 분기 가 푸시될 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 커밋 5 월 (21)로부터 [모든 2015], e41bf35 [2015년 5월 1일] Jeff King( peff ) .
(2015년 6월 5일 커밋 c4a8354 에서 Junio C gitster -- gitster -- 병합)

커밋 adfe5d0은 다음과 같이 설명합니다.

sha1_name : @{push} 속기 구현

@{upstream} 과 일반적으로 푸시하는 대상이라는 두 가지 고유한 관심 지점이 있을 수 있습니다. 후자의 속기는 없지만 있으면 유용합니다.

예를 들어, 아직 푸시하지 않은 커밋이 무엇인지 알고 싶을 수 있습니다 .

 git log @{push}..

또는 더 복잡한 예로서 일반적으로 origin/master ( @{upstream} )에서 변경 사항을 가져오고 변경 사항을 포크(예: myfork/topic ) 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

VonC

나는 이전에 커밋을 완료했으며 어떤 지점에도 푸시되지 않았으며 원격도 로컬도 아닙니다. 그냥 커밋. 다른 답변의 아무 것도 나를 위해 일하지 않았지만 다음을 사용했습니다.

 git reflog

거기에서 내 커밋을 찾았습니다.


Olaia

현재 분기에서 푸시되지 않은 커밋을 찾기 위한 편리한 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

그러나 현재 분기 이름도 결정합니다.


takeshin

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

 gitk

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

(사실 지금까지 아무도 언급하지 않은 것에 놀랐습니다.)


Justin Ohms

git branch -v 는 각 로컬 분기에 대해 "앞으로"인지 여부를 표시합니다.


Aurelien

다음 별칭을 사용하여 커밋되었지만 푸시되지 않은 파일 목록(및 상태)만 가져옵니다(현재 분기에 대해).

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

다음을 수행하십시오.

 git unpushed

CCC

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

 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}^..'

Giorgos Kylafas

git cherry -v

해당 메시지와 함께 로컬 댓글 기록(아직 푸시되지 않음)이 나열됩니다.


adswebwork

https://github.com/badele/gitcheck 스크립트를 참조하는 것이 좋습니다. 모든 git 리포지토리를 한 번에 확인하기 위해 이 스크립트를 코딩했으며 커밋하지 않은 사람과 푸시/풀하지 않은 사람을 보여줍니다.

여기 샘플 결과 여기에 이미지 설명 입력


Bruno Adelé

버그가 아닙니다. 원격에서 변경 사항을 가져왔지만 아직 병합되지 않은 실패한 자동 병합 후 git 상태가 표시될 수 있습니다.

로컬 repo와 remote 사이의 커밋을 보려면 다음을 수행하십시오.

 git fetch

이것은 100% 안전하며 작업 복사본을 조롱하지 않습니다. 변경 사항이 있으면 git status X commits ahead of origin/master 표시합니다.

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

 git log HEAD..origin

Igor Zevaka

이것은 나를 위해 더 잘 작동했습니다.

 git log --oneline @{upstream}..

또는:

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

VaTo

지정된 작업 디렉토리의 모든 Git, Mercurial 및 Subversion 저장소 를 스캔하고 커밋되지 않은 파일 및 푸시되지 않은 커밋 목록을 표시하는 unpushed라는 도구가 있습니다. 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


nailgun

모든 분기에서 푸시되지 않은 모든 커밋을 쉽게 나열하려면 다음 명령을 사용할 수 있습니다.

 git log --branches @{u}..

Mohsen Kashi

푸시아웃되지 않은 커밋 수가 한 자리 숫자인 경우(일반적인 경우) 가장 쉬운 방법은 다음과 같습니다.

 $ git checkout

git은 원점과 관련하여 "N 커밋보다 앞서"고 있다고 응답합니다. 이제 로그를 볼 때 이 숫자를 염두에 두십시오. "3개의 커밋보다 앞서 있는" 경우 기록의 상위 3개 커밋은 여전히 비공개입니다.


Kaz

유사: 병합되지 않은 분기를 보려면 다음을 수행합니다.

 git branch --all --no-merged

그것들은 의심 될 수 있지만 cxreg의 답변을 권장합니다.


Christophe Roussy

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

 git log ^origin/master master

Alexander Oh

위에서 말했듯이 :

git diff origin/master..HEAD

그러나 git gui를 사용하는 경우

GUI 인터페이스를 연 후 "저장소"-> " 기록 시각화"를 선택하십시오.

참고: 어떤 사람들은 CMD 프롬프트/터미널을 사용하는 것을 좋아하고 어떤 사람들은 Git GUI를 사용하는 것을 좋아합니다(간단함을 위해)


vrnair24

git 하위 모듈이 있는 경우...

git cherry -v 또는 git logs @{u}.. -p 를 수행하든 git submodule foreach --recursive 'git logs @{u}..' 를 통해 하위 모듈 을 포함하는 것을 잊지 마십시오.

이 모든 것을 확인하기 위해 다음 bash 스크립트를 사용하고 있습니다.

 unpushedCommitsCmd="git log @{u}.."; # Source: https://stackoverflow.com/a/8182309 # check if there are unpushed changes if [ -n "$($getGitUnpushedCommits)" ]; then # Check Source: https://stackoverflow.com/a/12137501 echo "You have unpushed changes. Push them first!" $getGitUnpushedCommits; exit 2 fi unpushedInSubmodules="git submodule foreach --recursive --quiet ${unpushedCommitsCmd}"; # Source: https://stackoverflow.com/a/24548122 # check if there are unpushed changes in submodules if [ -n "$($unpushedInSubmodules)" ]; then echo "You have unpushed changes in submodules. Push them first!" git submodule foreach --recursive ${unpushedCommitsCmd} # not "--quiet" this time, to display details exit 2 fi

Aidin

나는 파티에 정말 늦었고 언제 구현되었는지 확실하지 않지만 git push --dry-run option 사용하십시오.

 $ git push --dry-run To ssh://bitbucket.local.lan:7999/qarepo/controller.git 540152d1..21bd921c imaging -> imaging

Daniel B

다음은 모든 분기에 대한 원본과의 차이점을 보여주는 휴대용 솔루션(추가 설치 없이 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 사용할 수 있습니다.


bimlas

git show

로컬 커밋의 모든 diff를 표시합니다.

 git show --name-only

로컬 커밋 ID와 커밋 이름이 표시됩니다.


user2387567

git diff origin

지점이 원점을 추적하도록 설정되어 있다고 가정하면 차이점이 표시됩니다.

 git log origin

커밋 요약을 제공합니다.


mopoke

출처 : http:www.stackoverflow.com/questions/2016901/viewing-unpushed-git-commits

반응형