답변:
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 branch --set-upstream foo origin/foo
.
git log @{u}..
레포의 모든 단일 변경 사항을 나열합니다. 그들이 아직 존재하지 않는 방법은 없습니다.
git rev-parse --symbolic-full-name @{u}
인쇄에 적절한 원격 참조하십시오. 또한 git log @{u}..
업스트림 분기에서 도달 할 수없는 커밋을 보여줍니다. 여기에는 이미 원격 리포지토리에있는 커밋 (다른 참조로 도달 할 수있는 경우)이 포함될 수 있습니다. 이미 푸시 된 브랜치를 병합 한 직후에 발생합니다.
checkout <somebranch>
및 merge <otherbranch>
. 이 시점에서 나는 log @{u}..
모든 변경 사항을 나열했습니다.
완전한 대답은 아니지만 git fetch는 원격 저장소를 가져 와서 병합하지 않습니다. 그런 다음
자식 diff 마스터 원산지 / 마스터
git diff origin/master master
"git log origin..HEAD"를 사용하십시오.
"git fetch"다음에 "git log HEAD..origin"을 사용하십시오. 나열된 커밋 ID를 사용하여 개별 커밋을 Cherry-Pick 할 수 있습니다.
위의 내용은 "origin"이 원격 추적 브랜치의 이름이라고 가정합니다 (기본 옵션과 함께 clone을 사용한 경우에 해당).
"git log"와 @ {u} 답변이 처음에 "알 수없는 개정"오류를 표시했을 때 Chris / romkyns의 제안을 시도했습니다 git push --dry-run
.
"5905..4878 master-> master"와 같은 출력이 표시됩니다. 5905는 리모트가 가지고 있고 커밋하는 (그리고 4878을 포함하여) 리모트에 적용되는 최신 커밋입니다.
그런 다음 5905..4878을 다른 git 명령에 대한 인수로 사용하여 자세한 내용을 얻을 수 있습니다.
git diff 5905..4878 # Gives full code changes in diff style
git log --online 5905..4878 # Displays each commit's comment
hg incoming
하고 있는지에 대해 약간의 혼란이있는 것 같습니다hg outgoing
. 내가 찾은 가장 가까운 Git--dry-run
옵션 은 옵션입니다. 그냥git pull --dry-run
당신은 일이 필요로하는 모든 것들의 목록을 볼 수 있습니다.