IT story

다음 추적되지 않은 작업 트리 파일은 병합으로 덮어 쓰지만 걱정하지 않습니다.

hot-time 2020. 4. 10. 08:19
반응형

다음 추적되지 않은 작업 트리 파일은 병합으로 덮어 쓰지만 걱정하지 않습니다.


내 지점에는 .gitignore에 파일이 있습니다.

다른 지점에서는 해당 파일이 없습니다.

다른 지점을 내 머지에 병합하고 싶습니다. 해당 파일이 더 이상 무시되지 않는지 상관하지 않습니다.

불행히도 나는 이것을 얻는다 :

추적되지 않은 다음 작업 트리 파일은 병합으로 덮어 씁니다.

파일을 직접 찾거나 이동하거나 삭제하지 않고 파일을 덮어 쓰기 위해 pull 명령을 어떻게 수정합니까?


문제는 파일을 로컬로 추적하지 않지만 동일한 파일을 원격으로 추적하므로 버전을 제어하지 않는 로컬 파일을 시스템에서 "풀"하기 위해 시스템을 강제로 덮어 쓰는 것입니다.

달리기

git add * 
git stash
git pull

이렇게하면 모든 파일을 추적하고 해당 파일에 대한 모든 로컬 변경 사항을 제거한 다음 서버에서 파일을 가져옵니다.


로컬에서 추적되지 않은 파일을 지우는 명령을 시도 할 수 있습니다

Git 2.11 이상 버전 :

git clean  -d  -f .

이전 버전의 Git :

git clean  -d  -f ""

어디 -d다음으로 대체 할 수있다 :

  • -x 무시 된 파일과 Git에 알려지지 않은 파일도 제거됩니다.

  • -d 추적되지 않은 파일 외에도 추적되지 않은 디렉토리를 제거하십시오.

  • -f 강제로 실행해야합니다.

도움이 될만한 링크 는 다음과 같습니다 .


나를 위해 일한 유일한 명령은 다음과 같습니다.

git fetch --all
git reset --hard origin/{{your branch name}}

이 작업이 한 번만 수행되는 경우 풀을 수행하기 전에 작업 디렉토리에서 추적되지 않은 모든 파일을 제거하면됩니다. 현재 Git 작업 트리에서 로컬 (추적되지 않은) 파일을 제거하는 방법을 읽으십시오 . 추적되지 않은 모든 파일을 제거하는 방법에 대한 정보.

여전히 필요한 추적되지 않은 파일을 실수로 제거하지 마십시오.)


그 명령을 시도해 볼 수 있습니다

git clean -df

추적되지 않은 모든 파일을 제거하십시오.

git clean  -d  -fx .

git merge -f존재하지 않지만 존재합니다 git checkout -f. 아래 예에서 FOI는 '관심 파일'을 의미합니다. 도너 브랜치에 존재하고 수신 브랜치에 존재하지 않는 파일과 작업 디렉토리에 존재하고 추적되지 않기 때문에 병합을 차단하는 파일입니다. 다음은 관심있는 파일을 제거하여 병합이 정상적으로 진행되도록하는 단계입니다.

# FOI is the 'files of interest', the untracked files blocking the merge.

# 1. This forcibly replaces untracked FOI with tracked versions of
# the donor branch (as well as updating the rest of the working dir).
git checkout -f donor-branch

# 2. This removes the FOI because they they are tracked in our current
# (donor) branch, and absent in the `receiving-branch` we switch to.
git checkout receiving-branch

# 3. Now that the FOI are absent, merging in the donor branch will not
# overwrite any untracked files, so we get no errors.
git merge donor-branch

귀하의 질문에 '당신은 어떻게 pull파일을 덮어 쓰기 위해 명령을 수정 합니까?'

풀은 git fetch(원격 히스토리 획득) + 업스트림 브랜치의 자동 병합입니다. 따라서 pull 명령을 수정하여 (a) 원격 기록 가져 오기, (b) checkout -f 트릭을 사용하여 파일 덮어 쓰기, (c) 원격 기록 병합 단계는 다음과 같습니다.

git fetch origin
git checkout -f origin/mybranch
git checkout mybranch
git merge origin/mybranch

-f플래그 사용을 고려하는 경우 먼저 플래그를 드라 이런으로 실행할 수 있습니다. 다음에 어떤 종류의 흥미로운 상황이 될지 미리 알 수 있습니다 .-P

-n 
--dry-run 
    Don’t actually remove anything, just show what would be done.

수락 된 답변 외에도 파일을 지정하여 더 이상 필요하지 않은 경우 파일을 제거 할 수 있습니다.

git clean -f '/path/to/file/'

git clean이 제거 할 파일을 보려면 먼저 -n 플래그를 사용하여 실행해야합니다. 이 파일들은 삭제됩니다. 제 경우에는 어쨌든 신경 쓰지 않았으므로 더 나은 해결책이었습니다.


이 답변이 다른 답변과 어떻게 다릅니 까?

여기에 제시된 방법은 병합으로 덮어 쓸 파일 만 제거합니다. 디렉토리에 추적되지 않은 (아마도 무시 된) 파일이 있으면이 방법으로 해당 파일을 제거하지 않습니다.

해결책

이 스 니펫은 덮어 쓰지 않은 모든 추적되지 않은 파일을 추출 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 "{}"

설명-하나의 라이너가 무섭기 때문에 :

다음은 그 기능에 대한 분석입니다.

  1. git pull 2>&1- git pull출력을 캡처 하고 모두 stdout으로 리디렉션하여 쉽게 캡처 할 수 있습니다 grep.
  2. grep -E '^\s-의도는 덮어 쓰지 않은 추적되지 않은 파일 목록을 캡처하는 것 git pull입니다. 파일 이름 앞에 공백 문자가 많이 있으므로 파일 이름을 활용합니다.
  3. cut -f2- -2에서 캡처 한 각 줄의 시작 부분에서 공백을 제거하십시오.
  4. xargs -I {} rm -rf "{}"- xargs모든 파일을 반복하고 이름을 "{}"에 저장 한 후 각 파일을 호출 rm합니다. -rf추적되지 않은 디렉토리를 강제로 삭제하고 제거 하는 사용 합니다.

1-3 단계를 자기 명령으로 바꾸는 것이 좋지만, 이에 상응하는 것은 없습니다.


이를 수행하는 한 가지 방법은 로컬 변경 사항을 숨기고 원격 저장소에서 가져 오는 것입니다. 이런 방식으로 파일이 숨김으로 이동하므로 로컬 파일을 잃지 않습니다.

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추적되지 않은 새 파일을 제거하기 위해 실행 했습니다. 내 커밋이 예상대로 정확하게 나타납니다. 폴더의 파일 이름이 바뀌 었습니다.

이것이 나의 악몽을 피하는 데 도움이되기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/17404316/the-following-untracked-working-tree-files-would-be-overwritten-by-merge-but-i

반응형