귀하의 지점은 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.