Git Pull이 불가능하고 병합되지 않은 파일 모든 로컬 변경 사항을

나는 이것에 대한 유사한 질문을 모두 읽었습니다. 다음 중 어느 것도 작동하지 않은 것 같습니다.

Delete offending files
git reset --hard HEAD
git stash
git pull

거의 모든 조합, 변경 사항을 숨기고 저장소에서 가져 오면 병합 할 수없는 파일이 생성됩니다. 모든 로컬 변경 사항을 삭제하고 리모컨 만 사용하고 싶지만 다시 복제 할 수 없습니다 (이 작업을 수행하려는 개발자의 대역폭 및 인터넷 사용 제한). 어떻게해야합니까?

방금 시도했습니다.

git stash
git pull

또한 작동하지 않았습니다.

더 많은 정보

하나의 로컬 커밋이 있고 업스트림에도 커밋이 있습니다. 이렇게 시도 git pull --rebase했지만 여전히 제대로 작동하지 않습니다. “해결되지 않은 충돌로 인해 종료”라는 오류가 발생합니다. 이 경우 git stash, git reset --hard HEAD, git pull --rebase“pull is not possible, unmerged changes …”라는 오류 메시지가 표시됩니다.



답변

리모컨이 origin이고 브랜치가 master이고 이미 master체크 아웃 했다고 말하면 다음을 시도 할 수 있습니다.

git fetch origin
git reset --hard origin/master

이것은 기본적으로 현재 분기를 가져와 HEAD원격 분기 를 가리 킵니다 .

경고 : 코멘트에 명시된 바와 같이, 이 로컬 변경을 멀리 던질 것이다기원에 무엇이든 덮어 쓰기 .

또는 배관 명령을 사용하여 본질적으로 동일한 작업을 수행 할 수 있습니다.

git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard

편집 : 왜 이것이 작동하는지 간략하게 설명하고 싶습니다.

.git폴더 저장소의 수에 대한 커밋을 보유 할 수 있습니다. 커밋 해시는 무작위로 생성 된 값이 아니라 실제로 커밋 내용에 대한 확인 방법이므로 저장소간에 커밋 집합을 일치시키는 데 사용됩니다.

분기는 주어진 해시에 대한 명명 된 포인터입니다. 다음은 세트의 예입니다.

$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master

이러한 각 파일에는 커밋을 가리키는 해시가 포함되어 있습니다.

$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b

이것들은 모두 내부 git 저장 메커니즘을위한 것이며 작업 디렉토리 와 독립적으로 작동 합니다. 다음을 수행합니다.

git reset --hard origin/master

git은 origin / master가 가리키는 동일한 해시 값에서 현재 분기를 가리 킵니다. 그런 다음 해당 해시의 파일 구조 / 내용과 일치하도록 작업 디렉토리를 강제로 변경합니다.

직장에서 이것을 보려면 계속해서 다음을 시도하십시오.

git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD


답변

나는 운이 좋았다

git checkout -f <branch>

비슷한 상황에서.

http://www.kernel.org/pub//software/scm/git/docs/git-checkout.html

GIT에서 삭제 취소


답변

다음 명령 세트를 사용하여 해결되었습니다.

git reset --hard
git pull --rebase
git rebase --skip
git pull

트릭은 변경 사항을 리베이스하는 것입니다 … 우리는 사소한 커밋 하나를 리베이스하는 데 문제가 있었기 때문에 git rebase –skip (파일 복사 후)를 사용하여 건너 뛰었습니다.


답변

a를 실행 git fetch한 후이 문제가 발생하고 git이 git pull병합 충돌 ( 수정 된 파일 / 병합 해제 된 파일 모두)로 인해 실행을 허용하지 않는 경우 , 더 좌절감을 느끼게하기 위해 파일이 아직 병합되지 않았기 때문에). 작업 물을 잃지 않으려면 다음을 수행 할 수 있습니다.

파일을 준비합니다.

$ git add filename

그런 다음 로컬 변경 사항을 숨 깁니다.

$ git stash

작업 디렉토리 가져 오기 및 업데이트

$ git pull

로컬 수정 된 파일을 복원합니다 (git는 가능하면 자동으로 병합되고 그렇지 않으면 해결됩니다)

$ git stash pop

도움이되기를 바랍니다.


답변

로컬 변경 사항을 제거하지 않으려는 경우에도 솔루션이 있습니다. 병합되지 않은 파일을 수정하십시오 ( git add또는 git remove). 그런 다음 git pull.


답변

변경 사항을 버리고 싶다면 먼저의 출력을 확인하십시오 git status. 옆에 “unmerged”라고 표시된 파일의 경우 git add <unmerged file>. 그런 다음 git reset --hard. 추적되지 않은 파일을 제외한 모든 로컬 변경 사항을 제거합니다.


답변

나는 병합되지 않은 파일을 로컬에서 제거하는 git로 해결되었습니다.

$ git rm <the unmerged file name>
$ git reset --hard
$ git pull --rebase
$ git rebase --skip
$ git pull
Already up-to-date.

나중에 git commit을 보낼 때 :

$ git commit . -m "my send commit"
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean