아직 원격 저장소로 푸시되지 않은 로컬 커밋을 어떻게 볼 수 있습니까? 때때로, git status
내 브랜치가 X 커밋임을 인쇄 origin/master
하지만 항상 그런 것은 아닙니다.
이것은 Git을 설치할 때 발생하는 버그입니까, 아니면 뭔가 빠졌습니까?
git status --all
2010 년에 나타 났을 것입니다. 또는 git status -v
실제로 추가 정보가 포함 된 상세 출력을 제공해야합니다.
아직 원격 저장소로 푸시되지 않은 로컬 커밋을 어떻게 볼 수 있습니까? 때때로, git status
내 브랜치가 X 커밋임을 인쇄 origin/master
하지만 항상 그런 것은 아닙니다.
이것은 Git을 설치할 때 발생하는 버그입니까, 아니면 뭔가 빠졌습니까?
git status --all
2010 년에 나타 났을 것입니다. 또는 git status -v
실제로 추가 정보가 포함 된 상세 출력을 제공해야합니다.
답변:
git log origin/master..HEAD
동일한 구문을 사용하여 diff를 볼 수도 있습니다
git diff origin/master..HEAD
git config --global alias.ahead "log origin/master..HEAD --oneline"
어디에 있는지 빨리 알 수있었습니다. 더 많은 사탕 :for i in *; do echo $i && git ahead 2>/dev/null; done
git log --stat origin/master..HEAD
조금 더 놀랍도록
@{u}
구문을 아직 사용할 수 없으며 2010 년 2 월 12 일 에만 사용할 수 있음 을 지적하고 싶습니다 . 또한 @{u}
로컬 지점이 업스트림으로 구성되어 있지 않으면 작동하지 않습니다. 마지막으로, @{u}
현재 탭 완성 기능이 지원되지 않으며 탭 완성 기능 <remote>/<branch>
은이 정보를 얻는 가장 빠른 방법 중 하나이며 업스트림 구성 여부에 관계없이 작동합니다.
아직 푸시되지 않은 모든 브랜치에서 모든 커밋을 보려면 다음과 같이 찾으십시오.
git log --branches --not --remotes
그리고 각 브랜치에서 가장 최근의 커밋과 브랜치 이름 만 보려면 다음을 수행하십시오.
git log --branches --not --remotes --simplify-by-decoration --decorate --oneline
git log master..HEAD
여러 업스트림이 있었기 때문에 정상적인 작동하지 않습니다. 이 게시물 git log MyBranch --not --remotes
을 통해 단일 브랜치에서 업스트림으로 푸시되지 않은 모든 커밋을 보여줄 수있었습니다.
--decorate
가지도 보여줍니다. --graph
훨씬 더 분명합니다.
로컬에 있지만 업스트림하지 않은 모든 커밋을 표시 할 수 있습니다
git log @{u}..
@{u}
또는 @{upstream}
현재의 지점 (볼의 상류 지점을 의미 git rev-parse --help
하거나 git help revisions
자세한 내용).
git log @{u}.. -p
가장 유용한 옵션 중 하나는 -p 이며, 이는 각 확인에 도입 된 차이점을 보여줍니다.
당신은 이것을 할 수 있습니다 git log
:
git log origin..
그것이 origin
업스트림의 이름 이라고 가정하고 , ..
implies 뒤에 개정 이름을 남겨두고 HEAD
, 푸시되지 않은 새로운 커밋을 나열합니다.
git log
및 "2 점-하지-3"항상의 나를 생각 나게 stackoverflow.com/questions/53569/...을 )
git branch --set-upstream master origin/<branch>
이 명령을 사용하여 준비된 커밋을 확인하려는 경우 업스트림 설정으로 실행하십시오 .
다른 모든 답변은 "업스트림"(당신이 가져온 지점)에 대해 이야기합니다.
그러나 지역 지점 수 있습니다 밀어 A를 다른 이 가져옵니다 것보다 지점입니다.
master
원격 추적 분기 " origin/master
"로 푸시되지 않을 수 있습니다 . 상류 에 지점이 될 수 있지만, 원격 추적 브랜치에 밀어 수 또는 .
그것들은 값 과 함께 현재 브랜치에 의해 설정됩니다 .master
origin/master
origin/xxx
anotherUpstreamRepo/yyy
branch.*.pushremote
global remote.pushDefault
그것은이다 그 사람이 추적하는 : 카운트 unpushed 커밋을 추구 원격 추적 브랜치 지역 분기가 푸시 될 것이다.
가 다시 될 수 있습니다 또는 . branch at the remote
branch at the remote
origin/xxx
anotherUpstreamRepo/yyy
<branch>@{push}
참조 29bc885 커밋 , 3dbe9db 커밋 , adfe5d0 커밋 , 48c5847 커밋 , a1ad0eb 커밋 , e291c75 커밋 , 979cb24 커밋 , 1ca41a1 커밋 , 3a429d0 커밋 , a9f9f8c 커밋 , 8770e6f 커밋 , da66b27 커밋 , f052154 커밋 , 9e3751d 커밋 , ee2499f 커밋 5 월 (21)로부터 [모든 2015], 및 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
현재 브랜치 에서 푸시되지 않은 커밋을 찾기위한 편리한 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
또한 현재 지점 이름을 결정합니다.
git alias <alias-name> <command>
이 경우, 쉘에서 특수 문자를 이스케이프하려면 명령을 작은 따옴표로 묶어야합니다.
git config --global alias.unpushed '!GIT_CURRENT_BRANCH=$(git name-rev --name-only HEAD) && git log origin/$GIT_CURRENT_BRANCH..$GIT_CURRENT_BRANCH --oneline'
당신은 시도 할 수 있습니다 ....
gitk
나는 이것이 순수한 명령 줄 옵션이 아니라는 것을 알고 있지만 GUI 시스템에 설치되어 있다면 찾고있는 것을 정확하게 볼 수있는 좋은 방법입니다.
(지금까지 아무도 언급하지 않은 것에 놀랐습니다.)
gitk --all
모든 지점을 볼 수 있습니다.
tig
ncurses 대안입니다.
gitk
는 대단합니다! 이것이 존재한다는 것을 결코 알지 못했습니다! 멋진 UI에서 변경 사항을 탐색 할 수 있습니다.
tig
는 데스크톱 GUI에 액세스 할 수없는 '터미널 전용'상황에서 가장 유용합니다. 그것에 대해 처음 배우기! 흥미 롭다 :의 tig
반대이다 git
!
git branch -v
각 지점에 대해 "앞에"있는지 여부를 표시합니다.
devel
해당 줄은 * devel 8a12fc0 [ahead 1] commit msg
( *
체크 아웃 된 지점에 해당하는 줄에만 있음)입니다. ahead 1
"하나의 커밋으로 미리"를 의미합니다. 즉 하나의 커밋되지 않은 커밋이 있습니다.
git branch -vv
않습니까? Cf. docs :“두 번 제공하면 업스트림 브랜치의 이름도 인쇄하십시오 (git remote show <remote> 참조).
behind
및 / 또는 ahead
각 로컬 지점을 인쇄 하는 것입니다. OP의 문제를 해결하기에 충분합니다 (누르지 않은 커밋 감지). git branch -v
그것만으로도 충분하다. Git 2.16.2로 다시 테스트했다. :)
이전에 커밋을 수행했지만 지점이나 원격 또는 로컬로 푸시하지 않았습니다. 단지 커밋. 다른 답변에서 아무것도 효과가 없었지만 다음과 같이 작동했습니다.
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}^..'
https://github.com/badele/gitcheck 스크립트를 참조하십시오. 모든 git 저장소를 한 번에 체크인하기 위해이 스크립트를 코딩했다.
여기 샘플 결과
이것은 나를 위해 더 잘 작동했습니다.
git log --oneline @{upstream}..
또는:
git log --oneline origin/(remotebranch)..
@{upstream}
은 문자 그대로 ( upstream
마법의 단어 임), remotebranch
지사의 이름 일뿐입니다.
unpushed 라는 도구가 있으며 지정된 작업 디렉토리에서 모든 Git, Mercurial 및 Subversion 저장소 를 스캔하고 ucommited 파일 및 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
또는 공식 설명 하십시오. unpushed-notify
커밋되지 않은 변경 사항과 푸시되지 않은 변경 사항을 화면에 표시 하는 cronjob 스크립트도 있습니다 .
한 가지 방법은 한 지점에서 사용할 수 있지만 다른 지점에서는 사용할 수없는 커밋을 나열하는 것입니다.
git log ^origin/master master
위에서 말했듯이 :
git diff origin / master.HEAD
그러나 git gui를 사용하는 경우
GUI 인터페이스를 연 후 "Repository"-> Under that " Visualize History를 선택하십시오. "에서
참고 : 어떤 사람들은 CMD 프롬프트 / 터미널을 사용하는 반면 어떤 사람들은 Git GUI를 사용하는 것을 좋아합니다 (간단 함을 위해)
모든 지점의 원점과의 차이점을 보여주는 휴대용 솔루션 (추가 설치없이 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
로컬 커밋의 모든 diff를 표시합니다.
git show --name-only
로컬 커밋 ID와 커밋 이름이 표시됩니다.
git log @{push}..
. 아래 답변@{push}
에서 새로운 바로 가기 (추천하려는 원격 추적 지점 참조)