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.