귀하의 지점은 3 커밋으로 '원산지 / 마스터'보다 앞서 있습니다.


354

실행할 때 다음과 같은 결과가 나타납니다. git status

Your branch is ahead of 'origin/master' by 3 commits.

다른 게시물 에서이 문제를 해결하는 방법을 읽었 git pull --rebase지만 정확히 rebase가 무엇입니까, 데이터가 손실됩니까, 아니면 마스터와 동기화하는 간단한 방법입니까?


19
나는 이것이 중복이라고 생각하지 않습니다 ...이 질문은 그것이 무엇을 의미하는지 묻고 다른 질문은 변경 사항을 버리는 방법을 묻습니다.
onionjake

11
많은 사람들이 어떻게 이것을 중복으로 표시 했습니까? 이 질문은 분명히 그 사람이 변경 사항을 풀고 싶지 않다는 것을 나타냅니다. 메시지가 변경되어 혼동됩니다. 소위 중복 질문은 그 사람이 그들의 변화를 잃게 할 것입니다.
Derek Greer

4
위에 링크 된 질문은
실제로이

15
@ DerekGreer : 이것은 어떻게 중복으로 표시 되었습니까? 질문을 복제본으로 표시하는 대부분의 사람들은 실제로 질문을 읽고 이해 하지 않아도 됩니다. 피상적 인 유사성이 있다면, 그들은 둘이 동일하다는 결론에 도달 할 것이며, OP 또는 다른 사람들이 듀프 사냥꾼들은 실제로주의를 기울이는 데 관심이있었습니다.
iconoclast 2016 년

6
^^^ 연습은 SO, IMO를 죽이고 있습니다.
괴짜 주식

답변:


766

로컬 마스터를 변경하고 원격으로 푸시하지 않았기 때문에 해당 메시지가 표시됩니다. 이를 해결하는 방법에는 여러 가지가 있으며 일반적으로 워크 플로의 모양에 따라 다릅니다.

  • 좋은 워크 플로에서 원격 마스터 복사본은 좋은 것이되어야하며 로컬 마스터 복사본은 원격에있는 복사본입니다. 이 워크 플로를 사용하면이 메시지가 다시 표시되지 않습니다.
  • 다른 방법으로 작업하고 로컬 변경 사항을 푸시 해야하는 경우 git push origin원점이 가정하면 원격
  • 로컬 변경 사항이 잘못된 경우 변경 사항을 제거하거나 로컬 마스터를 원격 상태로 재설정하십시오. git reset --hard origin/master

82
git reset --hard origin / master는 내가 찾던 것입니다. 감사.
FluxEngine

4
@iberbeu 당신은 내 하루를 해결했습니다 ... git reset --hard origin / master는 내가 찾고있는 것입니다. + 1ed
Ravi

75
또한 제거 할 변경 사항을 확인하려면 살짝 밉니다 git diff master origin/master(예 :)git diff local remote
Shanimal

1
원격 원점 / 브랜치에 로컬 / 마스터가 있으므로 git push origin master:branch어느 반환 Everything up-to-date된를 사용하여 x commits에 의한 메시지가 사라졌습니다.
fyrye

2
마지막으로 내가 필요한 것을 얻었습니다!
RyanG

38

수정할 것이 없습니다. 당신은 단순히 3 개의 커밋을 만들고 아직 원격 브랜치로 옮기지 않았습니다. 수행하려는 작업에 따라 몇 가지 옵션이 있습니다.

  • git push: 변경 사항을 리모컨으로 옮깁니다 (원격에 다른 변경 사항이있는 경우 거부 될 수 있음)
  • 아무것도하지 않고 코딩을 계속하고 다른 날 동기화
  • git pull: 원격에서 변경 사항이있는 경우이를 가져와 변경 사항에 병합하십시오.
  • git pull --rebase: 위와 같지만 원격 변경 사항 위에 커밋을 다시 실행하십시오.

당신은 고전적인 상황에 처해 있습니다 (일반적으로 대부분의 워크 플로에서 마스터를 많이하지는 않지만). 일반적으로 수행 할 작업은 다음과 같습니다. 변경 내용을 검토하십시오. 어쩌면 git rebase --interactive화장품을 만들고, 빨아들이는 화장품을 떨어 뜨리고, 더 논리적으로 만들기 위해 재정렬하십시오. 이제로 리모컨으로 옮깁니다 git push. 로컬 지사가 최신 상태가 아니 어서 거부 된 경우 : git pull --rebase가장 최근의 변경 사항에 대해 내 작업을 다시 실행 git push해야합니다.


나는 자식 풀 --rebase을 사용하지만, 지금은 앞서 하나입니다 커밋 말한다
FluxEngine

그래서 변경을하고 마스터로 푸시 한 다음 팀 리더가 마스터로 병합했습니다. 변경 사항이 있으므로 현재 마스터와 동기화해야합니다.
FluxEngine

@MartyMcFly 여기서 무슨 일이 일어나고 있는지 알기가 어렵습니다. 이미 밀 었다고? 그렇다면 왜 아직 마스터하지 않은 커밋을합니까? 무슨 소리 야 your team lead merged to master? 이미 마스터하도록 강요했다고 말하지 않았습니까? 추가 커밋에는 무엇이 포함됩니까? 시도 git diff origin/master원격에서 어떻게 해당 지역의 지점 다릅니다 볼 수 있습니다.
pmr

1
도움을 주셔서 감사합니다, 상황을 설명하는 나쁜 일을했다면 죄송합니다. 그러나 내가 찾던 것은 git reset --hard origin / master입니다. 그러나 당신의 대답은 +1 도움이되었습니다.
FluxEngine

나는 바위와 힘든 곳 사이에 갇혀있는 것처럼 보이고, 변경 사항을 커밋하려고 시도한 다음 git이 말했다. 원격 저장소를 업데이트 할 수 없으므로 푸시가 불가능합니다. "git pull"의 말 : 이미 최신 상태. 그래서 세 번째 제안을 시도했지만 git은 rebase로 가져올 수 없습니다. 단계적 변경 사항이 없습니다. 커밋하거나 숨기십시오. Duh, 내가 처음 이곳에 온 방법은 :-(
Sander de Jong

36

이 4 가지 간단한 명령을 사용하십시오

1 단계 :git checkout <branch_name>

이것은 해당 지점으로가는 것이 분명합니다.

2 단계 :git pull -s recursive -X theirs

원격 브랜치 변경을 수행하고 충돌이 발생하면 변경을 대체하십시오. 여기 당신 git status이 이렇게하면 당신의 지점은 3 커밋으로 '원산지 / 마스터'보다 앞서 있습니다.

3 단계 :git reset --hard origin/<branch_name>

4 단계 :git fetch

지점을 하드 리셋하십시오.

즐겨.


17

Bitbucket에서 풀 요청을 병합 한 후이 문제가 발생했습니다.

해야했다

git fetch

그게 다야.


2
번들에서 repo로 작업하고 있었고 현재 번들에 "git fetch"를 적용하여 메시지를 제거 할 수있었습니다. tnx!
Martin Meeser

읽기 전용 체크 아웃시 내 자식 상태는 2 커밋보다 앞선 것으로 나타났습니다. 로그는 원래 커밋 된 모든 커밋처럼 보입니다. 나는 git pull을했고 5 커밋을 앞두고 있었다. .WTF ???? 로컬 인덱스를 새로 고치기 위해 가져와야했습니다 ... 모두 좋은 :)
Chris Rutledge

12

일반적으로 마스터와 다른 커밋이 무엇인지 확인 해야하는 경우 :

git rebase -i origin/master

이런 식으로 커밋을보고 삭제하거나 선택하기로 결정할 수 있습니다 ...


여기까지의 낮은 답변은 내가해야 할 일이었습니다. 나는 그 차이를 찾는 방법을 알 수 없었고, 나의 모든 다양한 git diff ...마술들이 작동하지 않았다. 내가 이것을했을 때, 그것은 noop유일한 커밋으로 주었고, 그것을 수락했을 때, 이제 내 지점은 출발지 / 마스터와 동기화되어 있습니다. 따라서 원산지 / 마스터의 커밋 차이는 아무런 영향을 미치지 않는 것으로 보입니다.
Philo vivero

11

이 메시지는 git로컬 master리포지토리 에서 3 개의 커밋을 만들고 리포지토리에 게시하지 않았 음을 의미 합니다. 이를 위해 실행할 명령은 git push {local branch name} {remote branch name}입니다.

명령 git pull(및 git pull --rebase)은 로컬 리포지토리에없는 원격 리포지토리에 커밋이있는 다른 상황에 대한 것입니다. 이 --rebase옵션은 git로컬 커밋을 한쪽으로 옮기고 원격 리포지토리와 동기화 한 다음 새 상태에서 세 가지 커밋을 적용하려고합니다. 충돌이 발생하면 실패 할 수 있지만이를 해결하라는 메시지가 표시됩니다. rebase를 사용하여 충돌을 해결하는 방법을 모르면를 중단하고 git rebase --abort실행하기 전에 상태로 돌아갑니다 git pull --rebase.


7

당신의 자식이 당신이 앞서 나간다고 말하면 먼저

자식 푸시 원점

당신이 repo에서 모든 최신 작업을 푸시했는지 확인하려면

그때,

git reset-하드 오리진 / 마스터

repo와 재설정하고 일치 시키려면


4

Bitbucket에 풀 요청을 병합 한 후에 한 번 일어났습니다.

방금해야 할 일 :

git fetch

내 문제가 해결되었습니다. 이게 도움이 되길 바란다!!!


0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

드디어:

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