git의 브랜치에서 파일을 제거하면 마스터 브랜치에서도 해당 파일이 제거된다는 의미입니까?

git의 브랜치에서 파일을 제거하면 마스터 브랜치에서도 해당 파일이 제거된다는 의미입니까?

방금 Git을 사용하면서 비논리적으로 보이는 상황에 직면했습니다. 커밋이 많은 저장소가 있으므로 이 단계에서는 브랜치가 하나만 있습니다(주인).

마스터 브랜치

이 분기에 다음과 같은 파일이 있다고 가정합니다.내파일.txt. 이제 몇 가지 파일을 변경하고 마스터 브랜치를 직접 수행하고 싶지 않기 때문에 다른 브랜치를 생성해야 하므로 다음을 실행합니다.

git checkout iss53

이제 스키마는 다음과 같습니다.

새로운 지점

알겠습니다. 지점으로 전환했습니다iss53, 나는 ls -l달리고내파일.txt. 변경 사항 중 하나에는 삭제가 포함됩니다.내파일.txt파일이므로 다음과 같습니다.

git rm MyFile.txt

좋습니다. ls -l다시 실행해 보니 그렇지 않습니다.내파일.txt더 이상. 그래서 나는 다시주인나뭇가지:

git checkout master

하지만내파일.txt파일도 사라졌습니다. 내 논리에 따르면 브랜치에서 파일을 삭제한 경우 해당 파일을 적용해야 합니다.오직해당 지점에 파일이 삭제된 이유는 무엇입니까?주인지점도? 아직 커밋을 하지 않았으며 분기만 했습니다.

메모: 두 이미지 모두에서 가져온 것입니다.Git-scm.

답변1

대답은 귀하의 질문에 있습니다.

아직 커밋을 하지 않았으며 분기만 했습니다.

커밋하지 않으면 변경 사항이 항상 작업 디렉터리에 유지됩니다. 브랜치를 전환해도 작업 디렉터리에는 영향이 없으며 작업 디렉터리도 마지막 커밋에 영향을 주지 않습니다. 파일이 삭제된 것을 볼 수 있지만 실제로는 작업 디렉터리에서만 삭제됩니다. 변경 사항을 지우고 마지막 커밋으로 돌아가려면 다음 명령을 사용하세요.

git reset --hard HEAD

따라서 파일이 다시 복원됩니다.

어쩌면 그것은 당신에게 논리가 아닐 수도 있지만 이 동작은 유용할 수 있습니다. 2개의 분기가 있다고 상상해 보십시오. master및 , 및 변경 사항을 로 이동하기 전에 development항상 작업해야 합니다 . 작업을 시작하기 전에 로 전환하는 것을 잊었다 가 커밋하기 전에 에 있음을 깨달았다고 가정해 보겠습니다 . 해결책은 간단합니다. 전환한 다음 커밋하면 됩니다.developmentmasterdevelopmentmasterdevelopment

답변2

내 브랜치(로그인이라고 함) 중 하나에서 파일을 제거할 때마다 마스터 브랜치에서는 해당 파일이 제거되지 않았습니다.

  1. 로그인 브랜치로 전환했습니다git checkout login
  2. test.html 파일을 제거했습니다.git rm --cached test.html
  3. 준비 영역에 모든 것을 추가했습니다.git add .
  4. 다음을 사용하여 변경 사항을 커밋했습니다.git commit -m 'removed test.html file'
  5. 다음을 사용하여 로컬 저장소를 Github 원격 저장소로 푸시했습니다.git push

관련 정보