git으로 푸시하려는 내용을 어떻게 알 수 있습니까?


588

내가 git push명령을 내렸을 때 무엇을 눌렀는지 알 수있는 방법이 있습니까?

제가 사진으로 찍는 것은 Github의 "풀 요청"기능의 "파일 변경"탭과 같은 것입니다. 풀 요청을 발행 할 때 풀 요청을 수락 할 경우 무엇이 풀릴지를 확인할 수 있습니다.집계 변경의 github 예

커맨드 라인은 괜찮지 만 위의 스크린 샷과 같은 GUI를 선호합니다.



많은 관련 질문 / 답변; 여기 또 다른가 있습니다 : stackoverflow.com/questions/2176278/preview-a-git-push/…
michael

답변:


665

푸시 할 파일 목록을 보려면 다음을 실행하십시오.

git diff --stat --cached [remote/branch]

예:

git diff --stat --cached origin/master

파일의 코드 차이를 푸시하려면 다음을 실행하십시오.

git diff [remote repo/branch]

변경 될 파일의 ​​전체 파일 경로를 보려면 다음을 실행하십시오.

git diff --numstat [remote repo/branch]

GUI에서 이러한 차이점을 보려면 git을 구성해야합니다. 시각적 diff 프로그램으로 'git diff'출력을 보려면 어떻게합니까?를 참조하십시오 . .


8
커밋이없는 git diff --cached의 두 변형은 HEAD와의 차이점 만 표시합니다. 나는 당신이 기원의 주요 지점은 마스터 가정, 자식은 diff [--stat] --cached 원산지 / 마스터를 의미 생각
mfontani

52
이것은 정확히 당신이 원하는 것이 아닙니다. HEAD인덱스가 아닌을 원점 ( git diff origin/master HEAD) 과 비교해야합니다 . 커밋을 위해 준비된 변경 사항이없는 경우에만 인덱스를 비교하면 동일한 결과가 나타납니다. 단계적 변경 사항이 있으면 diff에 포함되지만 아직 커밋되지 않았으므로 명확하게 푸시되지 않습니다.
Cascabel

5
이 답변은 @Jefromi의 의견에 정보를 포함하도록 편집 git diff --stat origin/master HEAD해야 정답입니다.
Tony Topper

2
@mfontani는 나에게 정답입니다. 변경 한 모든 내용을 커밋하면 커밋 할 대상이 아니라 이미 커밋 한 대상에서 무엇을 푸시할지 확인하고 싶습니다. git diff --cached [remote/branch]트릭을 수행 :)
poshaughnessy

2
출발지 / 마스터를 입력하는 대신 @ {u}를 사용할 수 있습니다 (예 : git diff @ {u} 또는 git diff HEAD @ {u}). 이는 업스트림 추적 분기가 이미 생성되어 링크 된 경우에만 작동합니다. 나는 많은 가지와 많은 리모컨을 가지고있을 때 유용하다는 것을 알기 때문에 어디에 연결되어 있는지에 대해 생각할 필요가 없습니다.
Damien Sawyer 2014

192

항상 드라 이런이 있습니다 :

git push --dry-run

실제로 데이터 전송을 제외한 모든 작업을 수행합니다.

보다 그래픽적인보기를 원한다면 많은 옵션이 있습니다.

git과 함께 제공되는 Tig 와 gitk 스크립트는 로컬 사본의 현재 브랜치와 리모트 또는 오리진의 브랜치를 표시합니다.

대체 텍스트

따라서 원점 이후에 수행하는 커밋은 푸시 될 커밋입니다.

을 입력하여 푸시하려는 브랜치에서 쉘에서 gitk를 연 gitk&다음, 리모트에있는 것과 리모트에 푸시하려는 것의 차이점을 보려면 로컬 푸시되지 않은 커밋을 선택하고 리모트를 마우스 오른쪽 단추로 클릭하십시오. "Diff this-> selected"를 선택하십시오. 대체 텍스트


18
git push --dry-run은 내가보고 싶은 것과 같은 것을 보여주지 않습니다. gitk는 더 가까이 있지만 푸시 할 모든 변경 사항의 총계를 보여주지는 않습니다. 따라서 6 개의 커밋을 원격으로 푸시하면 푸시 될 총계를보고 싶습니다. 하나의 커밋이 다음 커밋에 의해 완전히 무효화 될 수 있기 때문에 각 커밋이 개별적으로 갖는 것을 신경 쓰지 않습니다.
cmcculloh

1
푸시 할 내용이 다른 경우 git diff --stat HEAD origin/master또는을 수행하십시오 git diff HEAD origin/master. 중요한 것은입니다 HEAD , 그렇지 않으면 당신은 당신의 사랑하는의 미트되지 않은 변경을 포함,
다니엘 알더

git이 데이터를 원격으로 푸시하려고 시도하기 전에 자동으로 드라이 런을 수행하지 않는 이유가 있습니까? 대량의 데이터를 푸시하는 경우 모든 데이터가 업로드 된 후 오류가 표시됩니다. 방금 업로드 한 데이터를 업로드하는 데 시간과 대역폭을 낭비했습니다. 이상한 행동 인 것 같습니다.
zeusstl

1
문제 git push --dry-run는 여전히 원격에서 쓰기 권한이 필요하다는 것입니다. 따라서 업스트림을 푸시 할 수있는 권한이없는 복제본이 있지만 로컬 푸시 --dry-run되지 않은 변경 사항이 무엇인지 확인하고 싶다면 그렇게하지 마십시오.
Ed Avis

이것은 좋은 솔루션이지만 원격 연결이 필요합니다 (해당되는 경우 SSH 키 입력 포함). 당신은 단지 사이의 차이를 확인하려면 branch하고 origin/branch, 나는 그것이 실제로 원격 REPO에 연결이 필요하지 않기 때문에, 누트 G. 스탠의 답을 갈 것입니다. 필요한 것에 따라 좋거나 나쁠 수 있습니다.
Sean the Bean

169

푸시 대기중인 커밋을 간단히 나열하려면 : ( 이것은 기억할 것입니다 )

git cherry -v

SHA1 옆에 커밋 제목을 표시하십시오.


5
한 가지 흥미로운 점은 git cherry -v heroku/remote코드를 둘 이상의 리모콘에 보관하는 경우 와 같이 비교할 리모콘을 지정할 수 있다는 것입니다 .
fagiani

이러한 커밋에 포함 된 차이점을 실제로 연관시킬 수있는 가장 좋은 보완 명령은 무엇입니까?
Hassan Baig

이 명령은 훌륭하지만 푸시 중에 파일 이름을 변경하는 것과 같이 더 자세하게 싶습니다.
LS

21

아마도 실행하고 싶을 것입니다 git difftool origin/master.... 원점 / 마스터 브랜치에없는 현재 브랜치에있는 통합 된 diff를 표시하고 선택한 그래픽 diff 도구에 표시해야합니다. 최신 상태를 유지하려면 git fetch먼저 실행하십시오 .


2
git difftool -d origin/master, difftool이 meld로 설정되어있어 잘 작동합니다!
물병 자리 힘

git difftool -dAquarius Power 덕분입니다. 유일한 문제는 이동 된 파일을 감지하지 않고 삭제 및 추가 된 파일로 표시한다는 것입니다.
EM0

8

원격 저장소에서 로컬 버전을 푸시하기 전에 로컬 버전을 비교하는 한 가지 방법 (건조 실행의 푸시) :

TortoiseGit 사용 :
루트 폴더 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 TortoiseGit> 이전 버전과 비교>
버전 2를 선택하십시오.refs/remotes/origin/master


8

시도하십시오 git diff origin/master..master( origin/master상류층 이라고 가정 ). 와 달리 git push --dry-run업스트림에 대한 쓰기 권한이없는 경우에도 여전히 작동합니다.


5

를 사용 git gui하면 실제 커밋에서 변경된 사항의 ​​목록을 볼 수 있습니다. 또한 참조를 gitk위한 쉬운 인터페이스를 제공 할 수 있습니다 . 그냥 사이에 비교 remotes/...하고 master밀어 것입니다 무엇을 참조하십시오. 스크린 샷과 유사한 인터페이스를 제공합니다.

두 프로그램 모두 git에 포함되어 있습니다.


1
git gui에서 커밋되었지만 푸시되지 않은 모든 것을 보여주는 곳은 없습니다.
cmcculloh

git gui에서 수정되었지만 커밋되지 않은 것을 볼 수 있습니다. gik (Via gitk --all에서 모든 의견의 전체 목록을 볼 수 있습니다. 이제 개발자 브랜치의 실제 상태를 푸시하려는 리모컨과 비교할 수 있습니다.
fuz

4

파일이 변경되는 볼 받는 사람에 비해 실제 코드 변경보기 master당신이 사용할 수있는 지점 :

git diff --stat --patch origin master

참고 : Intellij IDE를 사용하는 경우 최상위 프로젝트를 마우스 오른쪽 단추로 클릭하고 Git > 분기와 비교 >를 선택한 후 원하는 원점을 선택하십시오 origin/master. 표시되는 파일 트리에서 파일을 두 번 클릭하여 시각적 차이를 볼 수 있습니다. 위의 명령 행 옵션과 달리 diff 창에서 로컬 버전을 편집 할 수 있습니다.


3

커밋을 다음과 같이 나열 할 수 있습니다.

git cherry -v

그런 다음 ^의 수가 커밋의 수와 같은 다음 명령과 비교합니다 (예 : 2 개의 커밋).

git diff HEAD^^

최신 커밋 목록을 보는 것이 좋습니다. 파일 이름은 제공되지 않습니다. 따라서 일부는 드라이 런 옵션과 패치 옵션을 사용하여 응답하는 것이 좋습니다. git diff --stat --patch origin master git push --dry-run
Sree Rama

2

Mac OS X를 사용하는 경우 Tower를 얻는 것이 좋습니다 .Git을 즐겁게 해준 훌륭한 프로그램입니다. 이제 더 이상 터미널 명령을 기억해야하며 파일의 차이점을보고 추적하고 해결할 수있는 훌륭한 GUI를 제공합니다.

그리고 나는 그들과 제휴하지 않고 단지 그들의 소프트웨어를 사용하고 정말로 좋아합니다.

http://www.git-tower.com/


2
타워를 사용하지만 커밋되었지만 푸시되지 않은 파일을 어떻게 볼 수 있습니까?
Michael Irey

이것은 질문에 대답하지 않습니다.
reinierpost

1

내 두 센트를 추가하기 만하면 ... gitlab 실행기의 gitlab 파이프 라인에서 작업을 실행할 때 이것을 구현하고 싶었습니다. 가장 좋은 방법은이 스크립트를 사용하는 것입니다.

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA

또한 제 경우에는 확장명으로 파일을 필터링하고 싶었습니다.

git diff --name-only $CI_COMMIT_BEFORE_SHA $CI_COMMIT_SHA '*.py'

그런 다음 예를 들어이 목록을 다른 곳으로 전달할 수 있습니다.

이것이 누군가를 도울 수 있기를 바랍니다.


1
  1. 원격에 대한 쓰기 권한이있는 경우
git push --dry-run
  1. 원격에 대한 쓰기 권한이없는 경우
git diff --stat HEAD remote/branch

0

이후 에는 푸시 전에 커밋 해시git commit -m "{your commit message}"얻습니다 . 다음 명령을 실행하여 푸시하려는 내용을 확인할 수 있습니다 .git

git diff origin/{your_branch_name} commit hash

예 : git diff origin/master c0e06d2


답변 해 주셔서 감사하지만 질문이 꽤 오래되고 투표가 많기 때문에이 노력이 필요하지 않았다고 생각합니다. 다른 질문에 노력을 기울이는 것이 좋습니다.
Pbd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.