두 가지 다른 질문이 있지만 관련이 있다고 생각합니다.
-
Git을 사용할 때 로컬에서 커밋했지만 아직 원격 지점으로 푸시하지 않은 변경 내용을 어떻게 찾을 수 있습니까? Mercurial 명령과 비슷한 것을 찾고
hg outgoing
있습니다. -
Git을 사용할 때 끌어 오기 전에 원격 브랜치의 변경 사항을 어떻게 찾을 수 있습니까? Mercurial 명령과 비슷한 것을 찾고
hg incoming
있습니다.
두 번째로 : 사용 가능한 항목을 확인한 다음 가져 오려는 변경 사항을 체리 픽 선택하는 방법이 있습니까?
답변
Git은 Hg처럼 네트워크를 통해 이런 종류의 정보를 보낼 수 없습니다. 하지만 당신은 실행할 수 있습니다 git fetch
(자세한처럼되는 hg pull
것보다 hg fetch
원격 서버에서 새로운 커밋을 가져 오기 위해).
따라서이라는 분기 master
와이라는 원격 이있는 경우을 origin
실행 한 후에도 git fetch
라는 분기가 있어야합니다 origin/master
. 그런 다음 을 수행 하여 수퍼 세트가되어야하는 git log
모든 커밋 을 얻을 수 있습니다 . 그 두 가지를 뒤집어 반대를 얻으십시오.master
origin/master
git log master..origin/master
내 친구 인 David Dollar가 시뮬레이션 할 몇 가지 git shell 스크립트를 만들었습니다 hg incoming/outgoing
. http://github.com/ddollar/git-utils 에서 찾을 수 있습니다 .
답변
Git 1.7.0부터는 업스트림 브랜치를 일반적으로 참조 할 수있는 특수 구문이 있습니다 : @{u}
또는 @{upstream}
.
모방하려면 hg incoming
:
git log ..@{u}
모방하려면 hg outgoing
:
git log @{u}..
위의 내용을 더 쉽게 사용할 수 있도록 다음 incoming
과 outgoing
별칭을 사용합니다.
git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'
답변
완전한 대답은 아니지만 git fetch는 원격 저장소를 가져 와서 병합하지 않습니다. 그런 다음
자식 diff 마스터 원산지 / 마스터
답변
-
“git log origin..HEAD”를 사용하십시오.
-
“git fetch”다음에 “git log HEAD..origin”을 사용하십시오. 나열된 커밋 ID를 사용하여 개별 커밋을 Cherry-Pick 할 수 있습니다.
위의 내용은 “origin”이 원격 추적 브랜치의 이름이라고 가정합니다 (기본 옵션과 함께 clone을 사용한 경우에 해당).
답변
모든 가지를 비교하기 위해 이것도 있습니다.
git log --branches --not --remotes=origin
이것은 git log 맨 페이지가 이것에 대해 말하는 것입니다 :
로컬 분기에 있지만 원점에 대한 원격 추적 분기에는없는 모든 커밋을 표시합니다 (원본이없는 것).
위의입니다 outgoing
. 의 경우 incoming
스왑하십시오.
git log --remotes=origin --not --branches
답변
난 그럴거야
$ git fetch --dry-run
대한 hg incoming
과
$ git push --dry-run
에 대한 hg outgoing
.
답변
git-out 은 hg outgoing
매우 정확하게 에뮬레이트하는 스크립트입니다 . “push -n”출력을 구문 분석하므로 추가 인수를 지정해야 할 경우 정확한 출력을 생성합니다.