로컬 파일을 강제로 덮어 쓰려면 어떻게해야 git pull
합니까?
시나리오는 다음과 같습니다.
- 팀원이 작업중인 웹 사이트의 템플릿을 수정하고 있습니다.
- 그들은 이미지 디렉토리에 이미지를 추가하고 있습니다 (그러나 소스 제어하에 이미지를 추가하는 것을 잊어 버립니다)
- 그들은 나중에 나에게 우편으로 이미지를 보내고 있습니다.
- 소스 컨트롤 아래에 이미지를 추가하고 다른 변경 사항과 함께 이미지를 GitHub에 푸시합니다.
- Git이 파일을 덮어 쓰고 싶지 않기 때문에 GitHub에서 업데이트를 가져올 수 없습니다.
이것은 내가 얻는 오류입니다.
오류 : 추적되지 않은 작업 트리 파일 ‘public / images / icon.gif’를 병합으로 덮어 씁니다.
힘내 강제로 그들을 덮어 쓰려면 어떻게해야합니까? 사람은 디자이너입니다-일반적으로 모든 충돌을 수동으로 해결하므로 서버는 컴퓨터에서 업데이트 해야하는 최신 버전을 가지고 있습니다.
답변
중요 사항 : 로컬 변경 사항이 있으면 손실됩니다. --hard
옵션이 있든 없든 , 푸시되지 않은 로컬 커밋은 손실됩니다. [*]
Git에 의해 추적 되지 않는 파일 (예 : 업로드 된 사용자 컨텐츠)이있는 경우 해당 파일은 영향을받지 않습니다.
이것이 올바른 방법이라고 생각합니다.
git fetch --all
그런 다음 두 가지 옵션이 있습니다.
git reset --hard origin/master
또는 다른 지사에있는 경우 :
git reset --hard origin/<branch_name>
설명:
git fetch
아무것도 병합하거나 리베이스하지 않고 원격에서 최신 버전을 다운로드합니다.
그런 다음 git reset
마스터 브랜치를 방금 가져온 것으로 재설정합니다. 이 --hard
옵션은 작업 트리의 모든 파일을origin/master
현재 로컬 커밋 유지
[*] : master
재설정하기 전에 분기를 작성하여 현재 로컬 커밋을 유지할 수 있다는 점에 주목할 가치가 있습니다 .
git checkout master
git branch new-branch-to-save-current-commits
git fetch --all
git reset --hard origin/master
이 후에는 모든 이전 커밋이에 유지됩니다 new-branch-to-save-current-commits
.
커밋되지 않은 변경
그러나 커밋되지 않은 변경 사항 (단계별)은 손실됩니다. 필요한 것을 숨기고 커밋하십시오. 이를 위해 다음을 실행할 수 있습니다.
git stash
그런 다음 커밋되지 않은 변경 사항을 다시 적용하십시오.
git stash pop
답변
이 시도:
git reset --hard HEAD
git pull
원하는 것을해야합니다.
답변
경고 : git clean
추적되지 않은 모든 파일 / 디렉토리를 삭제하고 취소 할 수 없습니다.
때로는 clean -f
도움이되지 않습니다. DIRECTORIES를 추적하지 않은 경우 -d 옵션도 필요합니다.
# WARNING: this can't be undone!
git reset --hard HEAD
git clean -f -d
git pull
경고 : git clean
추적되지 않은 모든 파일 / 디렉토리를 삭제하고 취소 할 수 없습니다.
-n
( --dry-run
) 플래그를 먼저 사용하십시오 . 실제로 아무것도 삭제하지 않고 삭제할 내용이 표시됩니다.
git clean -n -f -d
출력 예 :
Would remove untracked-file-1.txt
Would remove untracked-file-2.txt
Would remove untracked/folder
...
답변
고슴도치처럼 나는 대답이 끔찍하다고 생각합니다. 그러나 Hedgehog의 답변이 더 나을지 모르지만, 그것이 그것이 우아하다고 생각하지는 않습니다. 내가 찾은 방법은 정의 된 전략과 함께 “fetch”와 “merge”를 사용하는 것입니다. 덮어 쓰려는 파일 중 하나가 아닌 한 로컬 변경 내용이 유지되도록해야합니다.
먼저 변경 사항을 커밋하십시오.
git add *
git commit -a -m "local file server commit message"
그런 다음 변경 사항을 가져 와서 충돌이 있으면 덮어 씁니다.
git fetch origin master
git merge -s recursive -X theirs origin/master
“-X”는 옵션 이름이고 “-그들의”는 해당 옵션의 값입니다. 충돌이있는 경우 “자신의”변경 사항 대신 “자신의”변경 사항을 사용하도록 선택했습니다.
답변
대신에 :
git fetch --all
git reset --hard origin/master
다음을 수행하는 것이 좋습니다.
git fetch origin master
git reset --hard origin/master
원산지 / 마스터 지점으로 재설정하려는 경우 모든 리모컨과 지점을 가져올 필요가 없습니까?
답변
가장 좋은 방법은 먼저하는 것 같습니다.
git clean
추적되지 않은 모든 파일을 삭제하고 평소와 같이 계속하려면 git pull
…
답변
경고, gitignore 파일에 디렉토리 / * 항목이 있으면 파일을 영구적으로 삭제합니다.
일부 답변은 끔찍한 것 같습니다. David Avsajanishvili 제안에 따라 @Lauri에게 일어난 일에 대해 끔찍한 일입니다.
오히려 (git> v1.7.6) :
git stash --include-untracked
git pull
나중에 숨김 기록을 정리할 수 있습니다.
수동으로 하나씩 :
$ git stash list
stash@{0}: WIP on <branch>: ...
stash@{1}: WIP on <branch>: ...
$ git stash drop stash@{0}
$ git stash drop stash@{1}
잔인하게, 한 번에 :
$ git stash clear
물론 당신이 말한 것으로 돌아가고 싶다면 :
$ git stash list
...
$ git stash apply stash@{5}