왜 ‘rm’대신 ‘git rm’을 사용하여 파일을 제거합니까? 파일 시스템에서 직접 무언가를

SVN에서 svn을 사용하지 않고 파일 시스템에서 직접 무언가를 제거하면 많은 두통이 발생했습니다.

을 사용할 때 이것이 문제가되는 것을 발견하지 git못했지만 git에 자체 rm구현 ( git rm) 이 있음을 알았습니다 .

차이점은 무엇이며 rm그리고 git rm?



답변

방금 사용하는 경우 rm에는 후속 조치를 취해야합니다 git add <fileRemoved>. git rm한 번에이 작업을 수행합니다.

또한 git rm --cached인덱스에서 파일을 제거하고 (다음 커밋에서 삭제하기 위해 스테이징) 로컬 파일 시스템에 사본을 보관할 수도 있습니다.


답변

를 사용하여 파일을 제거하는 rm것은 그 자체로는 문제가되지 않지만 파일이 제거되었다는 것을 커밋하려면 git rm어쨌든 그렇게해야합니다.

또한 셸에 따라 git rm파일을 삭제 한 후 수행 하면 탭 완성이 없으므로 경로를 직접 입력해야 git rm하지만 파일이 여전히 존재하는 경우 탭 완성은 정상적으로 작동합니다.


답변

git rm--cached다음 커밋을 위해 삭제가 준비되도록 색인 및 작업 디렉토리에서 파일을 제거합니다 (사용한 경우에만 색인 ).


답변

그러나 git rm 대신 rm을 사용하면 끝납니다. git add를 건너 뛰고 다음을 사용하여 변경 사항을 직접 커밋 할 수 있습니다.

git commit -a


답변

색인 또는 작업 트리와 색인에서 파일을 제거하십시오. git rm은 작업 디렉토리에서만 파일을 제거하지 않습니다.

다음을 사용하여 파일을 삭제 한 rm -f다음 색인에서 파일 을 제거하는 방법은 다음과 같습니다.git rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

그러나이 모든 것을 한 번에 수행하면됩니다. git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html

답변

git rm을 사용할 때, 제거는 다음 커밋의 일부입니다. 따라서 변경 사항을 푸시하려면 git rm을 사용해야합니다.


답변

Andy의 답변에 추가하면 다음과 같은 추가 유틸리티가 있습니다 git rm.

  1. 안전 : git rm대신 rmGit은 HEAD파일 버전과 준비 인덱스 또는 작업 트리 버전 간에 불일치가있는 경우 제거를 차단합니다 . 이 블록은 진행중인 변경 사항이 제거되지 않도록 하는 안전 메커니즘입니다.

  2. 보호 : git rm --dry-run. 이 옵션은 git rm명령을 실행하지만 실제로 파일을 삭제하지는 않는 보호 수단입니다 . 대신 제거했을 파일을 출력합니다.