로컬 변경을 무시하면서 힘내?


489

git pull디렉토리를 날려 버리지 않고 로컬 파일 변경을 무시 하는 방법 이 git clone있습니까?


17
"무시"는 "덮어 쓰기"를 의미합니까?
Cascabel

@Cascabel 모든 로컬 변경 사항을 되돌리고, 모든 로컬 커밋을 커밋 해제하고, 모든 로컬 새 파일과 디렉토리를 삭제하고, 로컬로 삭제 된 파일과 디렉토리를 모두 삭제 취소하는 등의 의미 rm -rf local_repo && git clone remote_url입니다.
Victor

답변:


820

풀이 로컬 변경 사항을 덮어 쓰려고하면 작업 트리가 깨끗한 것처럼 병합을 수행하여 작업 트리를 청소하십시오.

git reset --hard
git pull

추적되지 않은 로컬 파일이 있으면이 git clean를 제거하는 데 사용할 수 있습니다. 사용 git clean -f, 비 추적 파일을 제거하는 -df비 추적 파일과 디렉토리를 제거하고, -xdf비 추적 또는 무시 파일이나 디렉토리를 제거 할 수 있습니다.

반면에 로컬 수정 사항을 어떻게 유지하려면 숨김을 사용하여 숨기고 숨기고 나중에 다시 적용하십시오.

git stash
git pull
git stash pop

풀의 절반이 병합되고 커밋 된 버전의 콘텐츠와 가져온 버전을 병합 해야하는 변경 사항 을 문자 그대로 무시 하는 것이 의미가 없다고 생각합니다 .


4
git reset파일이 여전히 원격 장치와 다른 경우 stackoverflow.com/questions/1257592/…를
Colonic Panic

3
힘내는 가장 이상한 것입니다. 힘내 재설정-완료. 그런 다음 자식 상태 : 지점이 2 커밋보다 앞서 있습니다.
Shailen

21
@shailenTJ 여기서 "로컬 변경"은 로컬 커밋이 아닌 커밋되지 않은 변경을 의미합니다. git reset --hard후자가 아니라 전자에 영향을 미칩니다. 원격 상태로 완전히 재설정하고 git reset --hard origin/<branch>싶지만 종종이 경우 커밋 두 가지 커밋은 버리고 싶은 일이 아니라 내가 한 일입니다.
Cascabel

2
로컬 리포지토리를 삭제하고 다시 다운로드하는 것과 같은 것입니다. 편의를 위해 변경 사항을 강제로 가져오고 덮어 쓸 수 있기를 원합니다. 99 %의 시간이 실수로 로컬에서 무언가를 엉망으로 만들었을 때이 오류 메시지가 표시되고 리포지토리에서 다시 시작하려고합니다.
sudo

로컬 변경 대 헤드를 가질 수없는 경우 어떻게합니까? 예를 들어 repo는 대소 문자를 구분하는 파일 시스템에서 만들어졌으며 대소 문자를 구분하지 않는 파일 시스템에서 복제되었으며 동일한 이름이 다른 두 개의 파일이 있습니까?
xster

305

나를 위해 다음이 효과가있었습니다.

(1) 먼저 모든 변경 사항을 가져옵니다.

$ git fetch --all

(2) 그런 다음 마스터를 재설정하십시오.

$ git reset --hard origin/master

(3) 풀 / 업데이트 :

$ git pull

22
최고 답변에 많은 문제가있을 때 나에게 큰 도움이되었습니다. 감사!
0x0

6
이것은 심지어 로컬 변경 사항을 커밋했을 때에도 작동하지만 여전히 되돌리기를 원합니다
agsachin

16
이것은 최고의 답변이 될 것입니다 :)
Purus

5
@Marco Servetto : 먼저 모든 git 변경 사항을 가져 오지만 아직 적용하지 마십시오. 그런 다음 마스터를 마지막 상태 (업데이트 됨)로 재설정합니다. 첫 번째 단계를 건너 뛰면 변경 사항이 이전 마스터 (로컬)로 되돌아갑니다. 내가 경험 한 바에 따르면, 결코 문제를 일으키지 않습니다. 다른 모든 시도는 마지막에 수행합니다.
Artur Barseghyan

1
이것은 나를 위해 일했습니다. 삭제 된 파일 복구를 포함한 모든 로컬 변경 사항을 무시하고 싶었습니다.
Neri

28

당신은 정확히 같은 결과를 제공하는 명령을 원합니다 rm -rf local_repo && git clone remote_url. 이 기능도 원합니다. git이 왜 그런 명령을 제공하지 않는지 궁금합니다 (예 : git reclone또는 git sync) svn도 그런 명령을 제공하지 않습니다 (예 : svn recheckout또는 svn sync).

다음 명령을 시도하십시오 :

git reset --hard origin/master
git clean -fxd
git pull

제거하려는 로컬 커밋이 이미 있어도 실제로 작동합니다.
유리 헨 세프

5
경고들 !! git clean -fxd파일 .gitignore도 제거합니다 .
Ramesh Navi

트윗 담아 가기 이것이 바로 원하는 것입니다. 원하는 것은 전체 로컬 저장소를 삭제 한 다음 복제하는 등 빠른 복제 방법을 사용하는 것입니다.
빅터

27

다음 명령은 항상 작동하지 않습니다 . 당신이 그냥하는 경우 :

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla

$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

등등...

위해 정말 모든 로컬 변경 사항을 thebranch을 다운로드하고 덮어 쓰기, 시작, 불과 수행


$ git checkout thebranch
$ git reset --hard origin/thebranch

이것은 잘 작동합니다.

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...

$ git status
# On branch thebranch
nothing to commit (working directory clean)

$ git checkout thebranch
Already on 'thebranch'

4
예. 이것이 내가 궁극적으로 "로컬에 대해 F를주지 말라"는 데 필요한 것입니다. 감사. :)
Adambean


8

git stash 를 보고 모든 로컬 변경 사항을 "스 태쉬 파일"에 넣고 마지막 커밋으로 되 돌리십시오. 이때 숨김 변경 사항을 적용하거나 버릴 수 있습니다.


8

Linux를 사용하는 경우 :

git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull

for 루프는 로컬 저장소에서 변경된 모든 추적 파일을 삭제하므로 git pull아무런 문제없이 작동합니다.
이것에 대한 가장 좋은 점은 추적 된 파일 만 repo의 파일로 덮어 쓰이고 다른 모든 파일은 그대로 유지됩니다.


나는 당신이 "추적 된 파일"을 의미한다고 생각합니다.
Ali

Powershell에 해당하는 것이 있습니까?
Earlee

8

가장 짧은 방법은 다음과 같습니다.

git pull --rebase --autostash

--autostash전에 몰랐어요 , 감사합니다!
시로

7

이것은 나를 위해 일했다

git fetch --all
git reset --hard origin/master
git pull origin master

수락 된 답변으로 충돌 오류가 발생합니다.


그것은 Artur Barseghyan의 2015 년 답변과 매우 유사합니다 ...하지만 여전히 세 번째 명령의 목적이 무엇인지 알고 싶습니다. 두 번째 명령 후에 작업 파일이 변경되었으며 세 번째 명령은 "이미 최신 상태입니다. "
마이크 설치류

그것은 내 환경에서 효과가 있었던 유일한 조합입니다. 아마도 당신은 다른 것을 보았을 것입니다. 저에게는 세 가지 명령이 필요했습니다
Pablo Pazos

흥미 롭군 버전 일 수 있습니다. git 2.7.4에 있습니다. 그러나 나는 또한 Artur Barseghyan의 새로운 의견을 보았습니다.
마이크 설치류

그것은 다른 사람들을 도울 수 있도록 아마도,하지만 내가 말할 수있는 유일한 것은, "다른 솔루션은하지 않았다 때이 나를 위해 일했다"입니다
파블로 Pazos


2

이것은 현재 브랜치를 가져오고 마스터로 빨리 감기를 시도합니다.

git fetch && git merge --ff-only origin/master

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