푸시되지 않은 Git 커밋 보기
원격 저장소에 아직 푸시되지 않은 로컬 커밋을 보려면 어떻게 해야 합니까?끔,가git status제 브랜치가 X 커밋임을 출력합니다.origin/master하지만 항상 그렇지는 않다.
Git의 버그일까요, 아니면 뭔가 부족한 것일까요?
그러면 오리진/마스터와 HEAD 사이의 모든 커밋 로그가 표시됩니다.
git log origin/master..HEAD
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 cherry -v
취득처: Git: 다른 브랜치에 없는 모든 푸시되지 않은 커밋 또는 커밋을 참조해 주세요.
이 조작은, 다음과 같이 실시할 수 있습니다.
git log origin/master..
은 '하다'라고 합니다.origin이며, 「」는 「」입니다.master은 뒤에 ...HEAD이치
다른 모든 답변은 "업스트림"(당신이 끌어낸 분기)에 대해 말합니다.
하지만 로컬 브랜치는 다른 브랜치로 푸시할 수 있습니다.
A master 액세스 Branch」에 푸시 할 수 없는 가 있습니다.origin/master
의 업스트림브런치master 수도 있다origin/master 트래킹브런치에는 수 있습니다.origin/xxx또는 심지어anotherUpstreamRepo/yyy.
은 그그에 those those those those those those those에 의해 된다.branch.*.pushremote, 「」와 대응합니다.global remote.pushDefaultdiscloss.discloss 。
푸시되지 않은 커밋을 찾을 때 카운트되는 것은 리모트 트래킹브런치입니다.branch at the remote로컬 지사를 밀어넣을 수 있습니다.branch at the remote 한 번 말할 수 origin/xxx또는 심지어anotherUpstreamRepo/yyy.
Git 2.5+(2015년 2분기)는 이를 위한 새로운 숏컷을 도입했습니다.
commit 29bc885, commit 3dbe9db, commit adfe5d0, commit 48c5847, commit a1ad0eb, commit e291c75, commit 979cb24, commit 1ca41a1, commit 3a429d0, commit a9f8c, commit a6c, commit a6f, commit a6627, commit d4753을 참조하십시오.
(2015년 6월 5일, COMMIT c4a8354에서 Junio C Hamano에 의해 병합됨)
Commit adfe5d0의 설명:
sha1_name: 실장@{push}
각에 2개의 관심 수 은, 「2」입니다.
@{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 reflog
거기서 나는 나의 헌신을 찾았다.
현재 분기에서 푸시되지 않은 커밋을 찾기 위한 편리한 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
또한 현재 지점 이름도 결정합니다.
시도해 보세요...
gitk
완전한 명령줄 옵션이 아닌 것은 알지만, 이 옵션이 설치되어 있고 GUI 시스템에 있는 경우 원하는 것을 정확하게 확인할 수 있으며, 더 많은 것을 확인할 수 있습니다.
(사실 지금까지 아무도 언급하지 않은 것이 좀 놀랍습니다.)
git branch -v는 각 로컬 브랜치에 대해 "사전"인지 여부를 표시합니다.
다음 별칭을 사용하여 커밋되었지만 푸시되지 않은 파일 목록(및 상태)만 가져옵니다(현재 브랜치).
git config --global alias.unpushed \
"diff origin/$(git name-rev --name-only HEAD)..HEAD --name-status"
그럼 다음 작업을 수행합니다.
git unpushed
가장 일반적인 방법은 다음과 같은 작업을 실행하는 것이라고 생각합니다.
git cherry --abbrev=7 -v @{upstream}
하지만 개인적으로는 달리기를 선호합니다.
git log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..
이는 업스트림에서 Marge되지 않은 모든 브랜치로부터의 커밋과 업스트림의 마지막 커밋(다른 모든 커밋의 루트노드로 표시됨)을 나타냅니다.자주 사용하기 때문에 에일리어스를 작성했습니다.noup네, 네, 네.
git config --global alias.noup \
'log --graph --decorate --pretty=oneline --abbrev-commit --all @{upstream}^..'
git cherry -v
로컬 코멘트 이력(아직 푸시되지 않음)과 대응하는 메시지가 나열됩니다.
스크립트 https://github.com/badele/gitcheck,에 접속할 것을 권장합니다.이 스크립트는 모든 git 저장소를 한 번에 체크 인하기 위해 코드화되어 있습니다.이 스크립트는 누가 커밋하지 않았는지, 누가 푸시하지 않았는지 보여줍니다.
은 샘플 결과입니다.
그것은 버그가 아니다.리모트로부터의 변경은 취득되지만 아직 Marge되지 않은 자동 머지 실패 후의 git 상태일 가능성이 있습니다.
로컬 repo 와 리모트간의 커밋을 표시하려면 , 다음의 순서에 따릅니다.
git fetch
이것은 100% 안전하며 작업 복사본을 실물 크기로 만들지 않습니다.이 git statusX commits ahead of origin/master.
리모트에는 있지만 로컬에는 없는 커밋 로그를 표시할 수 있게 되었습니다.
git log HEAD..origin
이 방법이 더 효과적이었습니다.
git log --oneline @{upstream}..
또는 다음과 같이 입력합니다.
git log --oneline origin/(remotebranch)..
지정된 작업 디렉토리에 있는 모든 Git, Mercurial 및 Subversion 저장소를 스캔하여 ucommitted 파일 및 unpushed 커밋 목록을 표시하는 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커밋되지 않은 변경 및 푸시되지 않은 변경을 화면에 알립니다.
모든 브랜치에서 모든 푸시되지 않은 커밋을 쉽게 나열하려면 다음 명령을 사용합니다.
git log --branches @{u}..
푸시되지 않은 커밋 수가 한 자리 숫자(대부분)인 경우 가장 쉬운 방법은 다음과 같습니다.
$ git checkout
git은 발신기지와 관련하여 "N개의 커밋을 선행"하고 있음을 알려줌으로써 응답합니다.따라서 로그를 볼 때 이 숫자만 염두에 두십시오."3개의 커밋 앞"인 경우 기록의 상위 3개의 커밋은 여전히 비공개입니다.
유사:병합되지 않은 분기를 보려면:
git branch --all --no-merged
의심스러울 수 있지만 cxreg의 답변을 권장합니다.
어떤 브런치에서는 사용할 수 있지만 다른 브런치에서는 사용할 수 없는 커밋을 나열하는 방법이 있습니다.
git log ^origin/master master
을 하고 알 수 .git push '나', '나'를 쓰면 돼요--dry-run option:
$ git push --dry-run
To ssh://bitbucket.local.lan:7999/qarepo/controller.git
540152d1..21bd921c imaging -> imaging
상기와 같이:
git diff origin/master..머리
그러나 git gui를 사용하는 경우
GUI 인터페이스를 연 후 [Repository]-> [ Visualize History ]를 선택합니다.
주의: CMD 프롬프트/터미널을 사용하는 사람이 있는가 하면 Git GUI를 사용하는 사람도 있습니다(간단함을 위해).
git 서브모듈이 있는 경우...
" " " " 를 git cherry -v ★★★★★★★★★★★★★★★★★」git logs @{u}.. -psubmodules를 포함하는 것을 잊지 마십시오.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
여기 모든 브랜치에 대해 원본과 다른 점을 보여주는 휴대용 솔루션(추가 설치 없이 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 및 커밋 이름을 표시합니다.
git diff origin
브랜치가 발신지를 추적하도록 설정되어 있는 경우는, 그 차이가 표시됩니다.
git log origin
커밋의 요약을 제공합니다.
언급URL : https://stackoverflow.com/questions/2016901/viewing-unpushed-git-commits
'source' 카테고리의 다른 글
| Microsoft 의 사용법.Office.Interop.MS Office가 설치되지 않은 머신에서 뛰어난 성능을 발휘하시겠습니까? (0) | 2023.04.19 |
|---|---|
| MS Excel 데이터를 SQL Server에 붙여넣기 (0) | 2023.04.19 |
| Excel 피벗 테이블을 다른 피벗 테이블의 데이터 소스로 사용 (0) | 2023.04.19 |
| Xcode 5: 코드 서명 자격 오류 (0) | 2023.04.19 |
| 파일에서 Bash 배열로 줄 읽기 (0) | 2023.04.19 |