Git : 로컬 리포지토리가 최신 상태인지 확인하는 방법은 무엇입니까?


85

내 로컬 리포지토리가 최신 상태인지 알고 싶습니다 (그렇지 않은 경우 이상적으로 변경 사항을보고 싶습니다).

git fetch또는 하지 않고 어떻게 확인할 수 git pull있습니까?

답변:


94

시도 git fetch --dry-run (설명서를 git help fetch말한다)

--dry-run
Show what would be done, without making any changes.

3
감사! 그러나 출력에서 ​​어떤 파일이 추가 / 수정 / 제거되었는지 이해하기는 어렵습니다.
Misha Moroshko 2011 년

1
업데이트 된 태그와 다양한 분기에 대한 시작 .. 종료 커밋 범위를 볼 수 있습니다. 이것이 충분하지 않으면 적절한 가져 오기 (풀이 아님)로 수행하여 자신의 분기 작업에 영향을주지 않고 원격의 적절하고 별도의 로컬 복사본을 제공합니다. 당기면 두 가지를 병합하려고 시도하지만 원하는 것이 아닙니다. 데이터 전송은 드라 이런 여부와 상관없이 동일합니다.
Philip Oakley

4
내가 달리면 git fetch --dry-run아무것도 나타나지 않는 이유는 무엇입니까?
Paramvir Singh Karwal

3
@ParamvirSinghKarwal Git은보고하는 내용이 드물다. 할 말이 없으면 아무 일도 일어나지 않은 것처럼 아무 말도하지 않습니다. 일반 가져 오기의 refspec이 최신 상태 일 수 있습니다. 추가 --all할까요?
Philip Oakley

1
@AaronBeall이 경우에는 해당 변경 사항을 로컬에서 이미 가져 왔지만 (가져올 것이 없음) 아직 브랜치에 병합하지 않았 음을 의미합니다. git pull대략 git fetch && git merge. 어느 시점 --dry-run에서.
DuckPuppy

34
git remote show origin

결과:

HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (local out of date) <-------

그것은 모든 시간 분기를 나열합니다. 긴 기록이있는 저장소가있는 경우 출력이 매우 복잡합니다.
Paulo Carvalho

자식 원격 표시 원점 | grep "your / branch"
jim smith

26

먼저를 사용 git remote update하여 원격 참조를 최신 상태로 가져옵니다. 그런 다음 다음과 같은 몇 가지 작업 중 하나를 수행 할 수 있습니다.

  1. git status -uno추적중인 지점이 앞, 뒤 또는 분기되었는지 알려줍니다. 아무 것도 표시되지 않으면 로컬과 원격이 동일합니다. 샘플 결과 :

지점 DEV에서

브랜치는 7 개의 커밋에 의해 'origin / DEV'뒤에 있으며 빨리 감기가 가능합니다.

( "git pull"을 사용하여 로컬 브랜치를 업데이트)

  1. git show-branch *master 이름이 'master'(예 : master 및 origin / master)로 끝나는 모든 분기의 커밋을 표시합니다.

-vgit remote update ( git remote -v update) 와 함께 사용 하면 어떤 브랜치가 업데이트되었는지 확인할 수 있으므로 추가 명령이 필요하지 않습니다.


2
왜 이렇게 멀어? git remote update ; git status -uno해결했습니다. git fetch --dry-run로컬이 원격 뒤에있는 경우에도 출력을 제공하지 않았습니다.
Aaron Beall

1
git remote -v update저에게 답입니다.
Paulo Carvalho

17

git status -uno로컬 브랜치가 원본 브랜치와 최신 상태인지 확인 하는 데 사용할 수 있습니다 .


18
원격 지점에서 확인하지 않고 로컬 상태 만 제공합니다.
Ishan Liyanage

4
로컬 만 제공하지만 git remote update ; git status -uno트릭을했습니다! 은 git fetch --dry-run내가 그것을 예상 (때 및 출력을 포기하지 git pull것들을 끌어 것입니다).
Aaron Beall

1
이 대답은 잘못되었으며 삭제해야합니다. 그대로 Git이 작동하는 방식에 대한 매우 일반적이지만 잘못된 신화를 영속화합니다. 이는 누군가가 댓글을 읽기로 결정한 경우에만 무효화됩니다.
Prometheus

8

실제로 git fetch는 아니지만 지역 지점을 변경 하지 않으므로 어떻게 상처를 입을 지 모르겠습니다 .


나는 이것에 전적으로 동의합니다. Git pull은 손상을 입히고 파일을 덮어 쓸 수 있습니다. 그러나 git fetch는 메타 데이터 만 가져 와서 git status와 같은 명령이 파일을 덮어 쓰지 않고 로컬 저장소가 최신 상태인지 여부를 알려줍니다. 질문의 문자에는 대답하지 않을 수도 있지만 질문의 정신에 대답하여 원하는 도구를 제공합니다. Git fetch, 그러면 git status는 파일을 덮어 쓰지 않고 원격 저장소와 관련하여 로컬 저장소의 위치를 ​​알려줍니다.
merlit64

5

또 다른 대안은 리포지토리뿐만 아니라 모든 리모트에서 브랜치를 볼 git show-branch remote/branch수있는 비교로 사용 하여 원격 브랜치의 상태 git show-branch *branch를 보는 것입니다! 자세한 내용은이 답변을 확인하십시오 https://stackoverflow.com/a/3278427/2711378


5

다음 두 가지 명령을 실행해야합니다.

  1. git fetch origin
  2. 자식 상태

1
이것은 작동하지만 질문은 '가져 오기'없이 명확하게 말합니다. 변경 사항을 실제로 가져 오거나 병합하지 않고 로컬 저장소가 원격 저장소와 어떻게 다른지 알고 싶은 경우가 많이 있습니다.
pedram bashiri

1
@pedrambashiri 진심으로 궁금합니다. 내가 아는 한 가져 오기만으로는 아무것도 해칠 수 없습니다.
Prometheus

@Prometheus 우선, 질문에 '가져 오기없이'라고 명확하게 명시되어있을 때 다른 방법이 없거나 실제로 수행 할 수있는 실제 사례가없는 경우 답변에 가져 오기를 사용할 수 없다는 점을 지적하고 싶었습니다. 답변에서 설명합니다. 그러나 질문에 답하기 위해 가져 오기는 원격 저장소의 로컬 사본을 업데이트합니다. 이 게시물의 다이어그램을보십시오. blog.osteele.com/2008/05/my-git-workflow
pedram bashiri

4

git fetch로컬 저장소를 원격 서버의 파일과 비교 하려면 먼저 실행해야 합니다.

이 명령은 원격 추적 브랜치를 업데이트하고 전화 할 때까지 worktree에 영향을 미치지 않습니다 git mergegit pull.

가져온 후 로컬 브랜치와 원격 추적 브랜치의 차이점을 확인하려면 여기에 설명 된대로 git diff 또는 git cherry를 사용할 수 있습니다.


2

사용하는 경우

git fetch --dry-run -v <link/to/remote/git/repo>

최신 여부에 대한 피드백을 받게됩니다. 따라서 기본적으로 이전에 제공된 답변에 "verbose"옵션을 추가하면됩니다.


1

이것은 사용하지 않고 불가능하다 git fetchgit pull. "최신"이 무엇을 의미하는지 확인하기 위해 원격 저장소로 이동하지 않고 저장소가 "최신"인지 여부를 어떻게 알 수 있습니까?


5
확인해주세요! 당신은 방금 당신의 생각에 대답했습니다! 초보자가 함께 넘어 질 것이기 때문에 더 조심해야합니다!
Amanuel Nega

4
@AmanuelNega : 이것은 단지 기본적인 논리입니다. 로컬 리포지토리가 원격 리포지토리와 동일한 상태인지 확인하려면 원격 리포지토리의 상태를 알아야합니다. 기간. 원격 리포지토리의 상태를 모르는 경우 로컬 리포지토리가 동일한 상태인지 여부를 알 수 없습니다. 가장 많이 투표하고 수락 한 답변은 git pullOP가 그의 질문에서 명시 적으로 금지하는를 사용합니다 .
Jörg W Mittag 2014

2
정보를 얻으십시오! git status -uno이것은 작동하며 git show-branch *master모든 마스터 브랜치의 상태를 보는 데 사용할 수도 있습니다 ! 아직도 불가능하다고 말하는 겁니까? 리모컨에 액세스 할 수있는 한 모든 지점의 상태를 볼 수 있습니다!
Amanuel Nega

2
@AmanuelNega : git status로컬 참조의 상태 만 알려주고 로컬 참조가 원격 참조에 대해 최신 상태인지 여부 는 알려주지 않습니다 . 다시 말하지만, 원격 저장소의 상태를 가져 오지 않고 원격 저장소의 상태를 아는 것은 논리적으로 불가능합니다. 기간. 이것은 단지 시공간의 기본 법칙입니다.
Jörg W Mittag 2014

6
서버 룸에서 누군가에게 전화를 걸어 "마스터 브랜치에있는 HEAD의 해시가 무엇입니까"라고 말할 수 있으므로 "논리적으로"불가능하지 않습니다. 그 해시가 없습니다. 이제 동기화되지 않았 음을 알 수 있습니다.
James Robinson

1

내 대답을 형식화하려고 시도했지만 할 수 없었습니다. stackoverflow 팀, 왜 대답을 게시하는 것이 그렇게 어려운지.

그럼에도 불구하고

답변 :
git fetch origin
git status ( "Your branch is behind 'origin / master'by 9 commits"와 같은 결과가 표시됨)
원격 변경 사항 업데이트 : git pull

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.