내 지점에는 .gitignore에 파일이 있습니다.
다른 지점에서는 해당 파일이 없습니다.
다른 지점을 내 머지에 병합하고 싶습니다. 해당 파일이 더 이상 무시되지 않는지 상관하지 않습니다.
불행히도 나는 이것을 얻는다 :
다음 추적되지 않은 작업 트리 파일을 병합하여 덮어 씁니다.
파일을 직접 찾거나 이동하거나 삭제하지 않고 파일을 덮어 쓰기 위해 pull 명령을 어떻게 수정합니까?
내 지점에는 .gitignore에 파일이 있습니다.
다른 지점에서는 해당 파일이 없습니다.
다른 지점을 내 머지에 병합하고 싶습니다. 해당 파일이 더 이상 무시되지 않는지 상관하지 않습니다.
불행히도 나는 이것을 얻는다 :
다음 추적되지 않은 작업 트리 파일을 병합하여 덮어 씁니다.
파일을 직접 찾거나 이동하거나 삭제하지 않고 파일을 덮어 쓰기 위해 pull 명령을 어떻게 수정합니까?
답변:
문제는 파일을 로컬로 추적하지 않지만 동일한 파일을 원격으로 추적하므로 버전을 제어하지 않는 로컬 파일을 시스템에서 "풀"하기 위해 시스템을 강제로 덮어 쓰는 것입니다.
달리기
git add *
git stash
git pull
이렇게하면 모든 파일을 추적하고 해당 파일에 대한 모든 로컬 변경 사항을 제거한 다음 서버에서 파일을 가져옵니다.
git add -A .; git stash
나를 위해 일했다. git add *
변형은 무시 경로에 대해 불평했다.
로컬에서 추적되지 않은 파일을 지우는 명령을 시도 할 수 있습니다
Git 2.11 이상 버전 :
git clean -d -f .
이전 버전의 Git :
git clean -d -f ""
어디 -d
다음으로 대체 할 수있다 :
-x
무시 된 파일과 Git에 알려지지 않은 파일도 제거됩니다.
-d
추적되지 않은 파일 외에 추적되지 않은 디렉토리를 제거하십시오.
-f
강제로 실행해야합니다.
도움이 될만한 링크 는 다음과 같습니다 .
-i
대화식 모드를 추가하겠습니다 . 뿐만 아니라 원치 않는 디렉토리를 삭제하는 등 나는 또한 단지 프로젝트 :-( 내 사용자 설정을 삭제
-x
좋습니다.
나를 위해 일한 유일한 명령은 다음과 같습니다.
git fetch --all
git reset --hard origin/{{your branch name}}
git merge
하면 추적되지 않은 파일을 덮어 씁니다.아래 주석은 '관심 파일'에 'FOI'를 사용합니다.
git checkout -f donor-branch # replace FOI with tracked `donor` versions
git checkout receiving-branch # FOI are not in `receiving`, so they disapppear
git merge donor-branch # now the merge works
git pull
하면 추적되지 않은 파일을 덮어 씁니다.pull = fetch + merge
따라서 위 git fetch
의 git checkout -f, git checkout, git merge
트릭을 따릅니다 .
git fetch origin # fetch remote commits
git checkout -f origin/mybranch # replace FOI with tracked upstream versions
git checkout mybranch # FOI are not in mybranch, so they disapppear
git merge origin/mybranch # Now the merge works. fetch + merge completes the pull.
git merge -f
존재하지 않지만 존재합니다 git checkout -f
.
git checkout -f
+ git checkout
를 사용 하여 관심있는 파일을 제거하고 (위 참조) 병합이 정상적으로 진행될 수 있습니다.
1 단계. 이 단계는 추적되지 않은 FOI를 추적 된 버전의 도너 브랜치로 강제로 바꿉니다 (또한 도너 브랜치를 체크 아웃하고 나머지 작업 디렉토리를 업데이트합니다).
git checkout -f donor-branch
2 단계. 이 단계에서는 FOI가 현재 (공여) 지점에서 추적되고 receiving-branch
스위치가 없기 때문에 FOI를 제거합니다 .
git checkout receiving-branch
3 단계. 이제 FOI가 없으므로 기증자 분기에서 병합해도 추적되지 않은 파일을 덮어 쓰지 않으므로 오류가 발생하지 않습니다.
git merge donor-branch
추적되지 않은 모든 파일을 제거하십시오.
git clean -d -fx .
이 작업이 한 번만 수행되면 풀을 수행하기 전에 작업 디렉토리에서 추적되지 않은 모든 파일을 제거하면됩니다. 현재 Git 작업 트리에서 로컬 (추적되지 않은) 파일을 제거하는 방법을 읽으십시오 . 추적되지 않은 모든 파일을 제거하는 방법에 대한 정보.
여전히 필요한 추적되지 않은 파일을 실수로 제거하지 마십시오.)
그 명령을 시도해 볼 수 있습니다
git clean -df
업데이트-더 나은 버전
이 도구 ( https://github.com/mklepaczewski/git-clean-before-merge )는 다음을 수행합니다.
git pull
.git pull
,git pull
버전 과 다른 수정 / 추적되지 않은 파일보고--pretend
파일을 수정하지 않는 옵션이 있습니다.구 버전
이 답변이 다른 답변과 어떻게 다릅니 까?
여기에 제시된 방법은 병합으로 덮어 쓸 파일 만 제거합니다. 디렉토리에 추적되지 않은 (아마도 무시 된) 파일이 있으면이 방법으로 해당 파일을 제거하지 않습니다.
해결책
이 스 니펫은 덮어 쓰지 않은 모든 추적되지 않은 파일을 추출 git pull
하여 삭제합니다.
git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} rm -rf "{}"
그리고 그냥하십시오 :
git pull
이것은 git porcelain 명령이 아니므로 항상 수행 할 작업을 다시 확인하십시오.
git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"
설명-하나의 라이너가 무섭기 때문에 :
다음은 그 기능에 대한 분석입니다.
git pull 2>&1
- git pull
출력을 캡처 하고 모두 stdout으로 리디렉션하여 쉽게 캡처 할 수 있습니다 grep
.grep -E '^\s
-의도는 덮어 쓰지 않은 추적되지 않은 파일 목록을 캡처하는 것 git pull
입니다. 파일 이름 앞에 공백 문자가 많이 있으므로 파일 이름을 활용합니다.cut -f2-
-2에서 캡처 한 각 줄의 시작 부분에서 공백을 제거하십시오.xargs -I {} rm -rf "{}"
- xargs
모든 파일을 반복하고 이름을 "{}"에 저장 한 후 각 파일을 호출 rm
합니다. -rf
추적되지 않은 디렉토리를 강제로 삭제하고 제거 하는 데 사용 합니다.1-3 단계를 자기 명령으로 바꾸는 것이 좋지만, 이에 상응하는 것은 없습니다.
git pull
해야했습니다git checkout <branch_name>
이를 수행하는 한 가지 방법은 로컬 변경 사항을 숨기고 원격 저장소에서 가져 오는 것입니다. 이런 방식으로 파일이 숨김으로 이동하므로 로컬 파일을 잃지 않습니다.
git add -A
git stash
git pull
이 명령을 사용하여 로컬 숨김 파일을 확인할 수 있습니다. git stash list
모르는 사람들을 위해, git은 파일과 폴더의 대문자 / 소문자 이름 차이를 무시합니다. 이름을 다른 경우와 동일한 이름으로 바꾸면 악몽으로 판명됩니다.
폴더 이름을 "Petstore"에서 "petstore"(대문자)로 바꿀 때이 문제가 발생했습니다. .git / config 파일을 편집하여 대소 문자를 무시하지 않고 변경을 수행하고 커밋을 취소하고 변경 사항을 저장하여 다른 지점으로 이동했습니다. 이 변경 사항을 다른 지점에 적용 할 수 없습니다.
내가 찾은 수정은 .git / config 파일을 일시적으로 편집하여 대소 문자를 다시 무시하는 것이 었습니다. 이것은 git stash apply
성공했다. 그런 다음 ignoreCase를 다시로 변경했습니다 false
. 그런 다음 git이 이상하다고 주장 한 petstore 폴더의 새 파일을 제외한 모든 파일을 삭제했습니다. 변경 사항을 커밋 한 다음 git reset --hard HEAD
추적되지 않은 새 파일을 제거하기 위해 실행 했습니다. 내 커밋이 예상대로 정확하게 나타납니다. 폴더의 파일 이름이 바뀌 었습니다.
이것이 나의 악몽을 피하는 데 도움이되기를 바랍니다.
git pull -f
다음 git checkout .
. 악몽이야
청소 / 리셋 / 하드 체크 아웃 / 리베이스가 저에게 효과적이지 않았습니다.
git 불평 한 파일을 방금 제거했습니다 *
rm /path/to/files/that/git/complained/about
*이 파일을 별도의 폴더에있는 새로운 저장소를 확인 하여이 파일을 제거 할 수 있는지 확인했습니다 (파일이 없습니다)