Git pull에서 다음 오류 메시지를 어떻게 무시합니까?
다음 파일에 대한 로컬 변경 사항은 병합으로 덮어 씁니다.
덮어 쓰 려면 어떻게 해야합니까?
과 같은 것을 시도 git pull -f
했지만 아무것도 작동하지 않습니다.
분명히하기 위해 모든 변경이 아니라 특정 변경 사항 만 덮어 쓰고 싶습니다.
git config core.fileMode false
내 시간을 절약
Git pull에서 다음 오류 메시지를 어떻게 무시합니까?
다음 파일에 대한 로컬 변경 사항은 병합으로 덮어 씁니다.
덮어 쓰 려면 어떻게 해야합니까?
과 같은 것을 시도 git pull -f
했지만 아무것도 작동하지 않습니다.
분명히하기 위해 모든 변경이 아니라 특정 변경 사항 만 덮어 쓰고 싶습니다.
git config core.fileMode false
내 시간을 절약
답변:
작업 복사본에서 git에 의해 추적되지 않은 파일을 포함하여 모든 로컬 변경 사항을 제거하려면 간단히 숨기십시오.
git stash push --include-untracked
더 이상 필요하지 않으면 이제 그 숨겨 놓을 수 있습니다.
git stash drop
이미 준비한 변경 사항을 숨기지 않으려면 (예 : with) git add
옵션을 추가하십시오 --keep-index
. 그러나 단계적 변경 사항이 업스트림 변경 사항과 충돌하는 경우 여전히 병합을 방해합니다.
로컬 변경 사항의 특정 부분 만 겹쳐 쓰려면 두 가지 가능성이 있습니다.
덮어 쓰고 싶지 않은 모든 것을 커밋하고 나머지 방법은 위의 방법을 사용하십시오.
git checkout path/to/file/to/revert
덮어 쓰려는 변경에 사용하십시오 . 를 통해 파일이 준비되지 않았는지 확인하십시오 git reset HEAD path/to/file/to/revert
.
git checkout HEAD^ path/to/file/to/revert
. HEAD ^를 사용하면 모든 차이가 생겼 습니다.
save --keep-index
" 을 (를) 제외해야했습니다 .
다른 두 가지 답변의 도움으로 직접 해결책을 찾았습니다.
git checkout HEAD^ file/to/overwrite
git pull
이것은 모든 로컬 변경 사항을 무시하고 ID를 요구하지 않습니다.
git reset --hard
git pull
다음은 단계별 변경 사항을 버리는 솔루션입니다.
git reset file/to/overwrite
git checkout file/to/overwrite
병합하기 전에 변경 사항을 커밋하거나 숨길 수 있습니다.
git stash save
git merge origin/master
git stash pop
--autostash
옵션은 옵션으로 만 사용할 수 --rebase
있습니다 (
하나의 파일에서 로컬 변경 사항을 삭제하려면 다음을 수행하십시오.
git checkout -- <file>
그런 다음 최신 버전으로 파일을 덮어 쓸 수 있습니다.
git pull
git reset HEAD~
git checkout
git checkout -- <file>
실패error: pathspec '<file>' did not match any file(s) known to git.
때때로, 이들 중 어느 것도 작동하지 않습니다. 짜증나게, 내가 생각하는 LF로 인해 작동 하는 것은 파일을 삭제 한 다음 당기는 것입니다. 이 솔루션을 권장하지는 않지만 파일이 존재하지 않으면 git은 변경 사항이 아닌 변경 사항이 무시되고 계속 진행할 것임을 알 수 없습니다.
자신의 책임하에 사용하십시오.
최근 Git에서는 -r
/ --rebase
on pull
명령을 추가 하여 페치 후 업스트림 브랜치 위에 현재 브랜치를 리베이스 할 수 있습니다 . 경고가 사라져야하지만 해결해야 할 충돌이 발생할 위험이 있습니다.
또는 다른 지점을 강제로 체크 아웃 한 다음 다시 돌아갈 수 있습니다 ( master
예 :
git checkout origin/master -f
git checkout master -f
그런 다음 평소대로 다시 당기십시오.
git pull origin master
이 방법을 사용하면 숨김 ( git stash
) 및 잠재적 권한 문제, 파일 재설정 ( git reset HEAD --hard
), 파일 제거 ( git clean -fd
) 등의 시간을 절약 할 수 있습니다 . 또한 위의 내용을 기억하기가 더 쉽습니다.
이 문제는 파일을 로컬로 변경했으며 Git 리포지토리의 변경 사항과 동일한 파일이 존재하기 때문에 풀 / 푸시하기 전에 로컬 변경을 숨겨야합니다.
단일 파일의 로컬 변경 사항을 겹쳐 쓰려면 다음을 수행하십시오.
git reset file/to/overwrite
git checkout file/to/overwrite
모든 로컬 변경 사항 (모든 파일의 변경 사항)을 겹쳐 쓰려면 다음을 수행하십시오.
git stash
git pull
git stash pop
또한이 문제는 마스터 분기와 병합되지 않은 분기에 있기 때문일 수 있습니다.
git reset --hard && git clean -df
주의 : 추적되지 않은 파일을 재설정하고 삭제합니다.
이 문제를 해결하는 가장 좋은 방법은 다음과 같습니다.
git checkout -- <path/file_name>
그 후 다음과 같이 파일을 덮어 쓸 수 있습니다.
git pull origin master
git checkout -- path/*
한 번만 사용 했고 그 후 풀을 실행할 수있었습니다.
다음은 문제를 해결하기위한 전략입니다.
문제 설명
10 개가 넘는 파일을 변경해야합니다. 우리는 시도 PULL (git pull origin master)
했지만 Git은 소리 쳤다.
오류 : 다음 파일에 대한 로컬 변경 사항을 병합하여 덮어 씁니다. 병합하기 전에 변경 사항을 커밋하거나 숨기십시오.
우리는 실행하려고 commit
다음과 pull
하지만 중 하나가 작동하지 않았다.
해결책
파일이 "스테이지 영역"(일명 "인덱스 영역")에 있고 일부는 "헤드 영역"(일명 "로컬 Git 디렉토리")에 있었기 때문에 실제로 는 더티 스테이지에있었습니다. 그리고 우리는 서버에서 변경 사항을 가져오고 싶었습니다.
Git의 각기 다른 단계에 대한 정보는 다음의 링크를 확인하십시오 : GIT 단계
우리는 다음 단계를 따랐다
git stash
(이것은 작업 디렉토리를 깨끗하게 만들었습니다. 변경 사항은 Git에 의해 스택에 저장됩니다).git pull origin master
(서버에서 변경 사항을 가져옵니다)git stash apply
(스택의 모든 변경 사항을 적용)git commit -m 'message'
(변경 사항을 커밋)git push origin master
(서버에 대한 변경 사항을 푸시했습니다)git stash drop
(스택을 떨어 뜨립니다)언제 그리고 왜 숨겨야하는지 이해합시다
더티 상태 에있는 경우 파일을 변경하고 어떤 이유로 든 매우 긴급한 작업을 위해 다른 브랜치 를 가져 오거나 다른 지점으로 전환 해야한다는 의미입니다. 변경 사항을 적용 할 때까지 전환하십시오. 이 stash
명령은 도움의 손길로 여기에 있습니다.
ProGIT , 2nd Edition 책에서 :
종종 프로젝트의 일부에서 작업 할 때 상황이 지저분하고 분기가 다른 작업을 수행하도록 전환하려고합니다. 문제는, 당신은 나중에이 시점으로 돌아갈 수 있도록 반 완료 일을 저지르고 싶지 않다는 것입니다. 이 문제에 대한 답은 git stash 명령입니다. 스 태싱은 작업 디렉토리의 더티 상태, 즉 수정 된 추적 파일 및 단계적 변경 사항을 취하여 언제든지 다시 적용 할 수있는 완료되지 않은 변경 사항 스택에 저장합니다.
TL; DR;
git pull --rebase --autostash
-r, --rebase[=false|true|merges|preserve|interactive] When true, rebase the current branch on top of the upstream branch after fetching. If there is a remote-tracking branch corresponding to the upstream --autostash, --no-autostash Before starting rebase, stash local modifications away if needed, and apply the stash entry when done
나는 이것이 왜 아직 대답하지 않았는지 알지 못하지만 해결책은 간단합니다. 여기에있는 모든 대답은 동일합니다 : 로컬 변경 사항을 삭제 / 저장하고 업스트림 save
적용 한 다음 로컬 변경 사항을 적용하십시오 ().
무엇 git pull --rebase --autostash
단계별 작업을 수행합니다
1. your local changes saved by `--autostash`
2. your local commits saved by `--rebase`
3. commits from upstream applied to your branch
4. your local commits are restored on top of upstream
5. your local changes are restored to working directory
내 경우 (아마도 너의 것) :
로컬 변경 사항 (작업 디렉토리의 변경 사항)이 있습니다.
원격 변경 사항을 가져 오려고하면 오류가 발생합니다.
이 변경 사항은 로컬 변경 사항과 교차하지 않습니다.
따라서 pull --rebase --autostash
로컬 변경 사항을 자동으로 저장하고 아무런 문제없이 적용하면
나는 이것의 특별한 경우를 가졌다 : 나는 --sumume-unchanged 파일을 가지고 있었다. git status
명령이 변경 사항을 표시하지 않아 찾기가 어려웠습니다.
내 저장소에서 파일을 무시하고 있었고 내가 할 때 git pull upstream master
다음 오류가 발생했습니다.
error : 다음 파일에 대한 로컬 변경 사항이 merge로 겹쳐 써질 것입니다 : myfile.js 병합하기 전에 변경 사항을 커밋하거나 숨기십시오. 중단
그것을 해결하기 위해 나는 다음을했다.
git update-index --no-assume-unchanged myfile.js
그런 다음 git status
이 메시지를 받았습니다.
지점 마스터에서 지점은 4 커밋으로 '원점 / 마스터'뒤에 있으며 빨리 감을 수 있습니다. ( "git pull"을 사용하여 로컬 브랜치를 업데이트하십시오)
커밋을 위해 준비되지 않은 변경 사항 : (커밋 될 내용을 업데이트하려면 "git add ..."사용) (작업 디렉토리에서 변경 사항을 무시하려면 "git checkout-..."사용)
수정 : myfile.js
커밋에 추가 된 변경 사항 없음 ( "git add"및 / 또는 "git commit -a"사용)
그런 다음을 git checkout myfile.js
수행했습니다 git pull upstream master
. 이번에는 git pull 작업이 성공했습니다.
나는 자식에 익숙하지 않으며 내 솔루션이 좋은 아이디어인지 확실하지 않습니다.
나는 모든 답변을 테스트했지만 아무도 나를 위해 일하지 않았습니다!
그러나 다른 해결책을 찾았습니다.
1. Backup both of local and repository versions of the file.
2. Delete the file from repository.
3. git add .
4. git commit
5. git push
도움이 되었기를 바랍니다.
아직 커밋되지 않은 로컬 리포지토리에 일부 변경 사항이 있으므로 원격 리포지토리에서 가져 오기 전에 로컬 리포지토리에서 변경 내용을 커밋하기 때문에 "다음 파일에 대한 로컬 변경 사항을 병합으로 덮어 씁니다"라는 오류가 발생합니다.
원격 저장소에 분기 xyz가 있고 원격 저장소 xyz 분기가 로컬 저장소 xyz 분기에 병합 (복사)되기를 원한다고 가정 해 보겠습니다.
{
git checkout xyz //check out to the respective branch in local repo
git commit -m "commiting message" //commit changes if any, in local repo branch xyz
git pull //it pulls remote xyz branch into local xyz branch
}
이 메시지는를 git-lfs
사용하고 실제 파일로 파일 포인터를 덮어 쓴 경우에도 발생할 수 있습니다 .
그런 다음 사용합니다 :
git stash
git lfs migrate import
git pull
내 경우의 전체 출력
λ git stash
Saved working directory and index state WIP on master: 5d4ad47 Merge branch 'feature/...' into 'master'
Encountered 1 file(s) that should have been pointers, but weren't:
public/apple-touch-icon.png
λ git pull
Updating 5a4ad44..b25f79d
error: Your local changes to the following files would be overwritten by merge:
public/apple-touch-icon.png
Please commit your changes or stash them before you merge.
Aborting
λ git lfs migrate import
migrate: Fetching remote refs: ..., done
migrate: Sorting commits: ..., done
migrate: Rewriting commits: 100% (0/0), done
migrate: Updating refs: ..., done
migrate: checkout: ..., done
λ git pull
Updating 5d4ad47..a25c79a
Fast-forward
public/apple-touch-icon.png | Bin 2092 -> 130 bytes
public/favicon.ico | Bin 6518 -> 1150 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
시도했지만 성공적으로 가져 오기 전에 커밋하지 않은 모든 파일을 커밋하면 AS에서 해당 메시지를받지 못합니다.