"file1.txt"
Git 저장소에 파일을 추가했습니다 . 그 후, 나는 그것을 최선을 다하고라는 디렉토리의 몇 가지 추가 dir1
등을 dir2
하고 Git 저장소로 최선을 다하고 있습니다.
지금 현재의 저장소가 "file1.txt"
, dir1
그리고 dir2
. 어떻게 삭제할 수 있습니다 "file1.txt"
처럼 다른 사람에 영향을주지 않고 dir1
하고 dir2
?
"file1.txt"
Git 저장소에 파일을 추가했습니다 . 그 후, 나는 그것을 최선을 다하고라는 디렉토리의 몇 가지 추가 dir1
등을 dir2
하고 Git 저장소로 최선을 다하고 있습니다.
지금 현재의 저장소가 "file1.txt"
, dir1
그리고 dir2
. 어떻게 삭제할 수 있습니다 "file1.txt"
처럼 다른 사람에 영향을주지 않고 dir1
하고 dir2
?
답변:
사용하십시오 git rm
.
Git 저장소 와 파일 시스템 에서 파일을 제거 하려면 다음을 사용하십시오.
git rm file1.txt
git commit -m "remove file1.txt"
그러나 Git 저장소에서만 파일을 제거하고 파일 시스템에서 제거하지 않으려면 다음을 사용하십시오.
git rm --cached file1.txt
git commit -m "remove file1.txt"
그리고 변경 사항을 원격 저장소로 푸시
git push origin branch_name
git rm file.txt
repo에서 파일을 제거하고 로컬 파일 시스템에서도 파일을 삭제합니다 .
저장소에서 파일을 제거하고 로컬 파일 시스템에서 파일을 삭제 하지 않으 려면 다음을 사용하십시오.
git rm --cached file.txt
아래 정확한 상황은 git을 사용하여 비즈니스 웹 사이트의 버전 제어를 유지하지만 "mickey"디렉토리는 개인 컨텐츠를 CAD 개발자와 공유하는 tmp 폴더였습니다. 그가 거대한 파일을 필요로 할 때, 나는 개인의 연결되지 않은 디렉토리를 만들고 브라우저를 통해 가져 오기 위해 파일을 ftpd했습니다. 내가 이것을 잊어 버린 후에 나중에 git add -A
웹 사이트의 기본 디렉토리에서 수행했습니다 . 이어서 git status
커밋이 필요한 새 파일을 보여주었습니다. 이제 자식 추적 및 버전 제어에서 삭제해야했습니다 ...
아래의 샘플 출력은 실수로 .003
파일을 삭제 한 내게 발생한 결과 입니다. 고맙게도 로컬 사본에 발생한 일에 신경 쓰지 .003
않지만 현재 변경된 다른 파일 중 일부는 웹 사이트에서 방금 업데이트 한 것으로 로컬 파일 시스템에서 삭제 된 서사시입니다! "로컬 파일 시스템"= 라이브 웹 사이트 (위대한 관행은 아니지만 현실입니다) .
[~/www]$ git rm shop/mickey/mtt_flange_SCN.7z.003
error: 'shop/mickey/mtt_flange_SCN.7z.003' has local modifications
(use --cached to keep the file, or -f to force removal)
[~/www]$ git rm -f shop/mickey/mtt_flange_SCN.7z.003
rm 'shop/mickey/mtt_flange_SCN.7z.003'
[~/www]$
[~/www]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: shop/mickey/mtt_flange_SCN.7z.001
# modified: shop/mickey/mtt_flange_SCN.7z.002
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002
[~/www]$
[~/www]$
[~/www]$ git rm --cached shop/mickey/mtt_flange_SCN.7z.002
rm 'shop/mickey/mtt_flange_SCN.7z.002'
[~/www]$ ls shop/mickey/mtt_flange_S*
shop/mickey/mtt_flange_SCN.7z.001 shop/mickey/mtt_flange_SCN.7z.002
[~/www]$
[~/www]$
[~/www]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: shop/mickey/mtt_flange_SCN.7z.002
# deleted: shop/mickey/mtt_flange_SCN.7z.003
#
# Changed but not updated:
# modified: shop/mickey/mtt_flange_SCN.7z.001
[~/www]$
업데이트 : 이 답변에 약간의 트래픽이 발생하므로 다른 Git 답변 에 몇 가지 훌륭한 리소스가 있음을 언급했다고 생각 합니다. 이 페이지 에는 Git을 이해하기 쉽게하는 그래픽이 있습니다. "프로 힘내"이 책은 온라인 과 나에게 많은 도움이됩니다.
git commit -m "Just removing file1.txt"
해야합니다. 원격 리포지토리가있는 경우 다음 과 같은 커밋을 푸시하십시오 git push origin master
.
먼저, git rm
특히 여러 파일에을 사용하는 경우 git
명령이 아닌 셸에서 와일드 카드를 확인하는 것을 고려하십시오 .
git rm -- *.anExtension
git commit -m "remove multiple files"
그러나 파일이 이미 GitHub에 있는 경우 (2013 년 7 월부터) 웹 GUI에서 직접 삭제할 수 있습니다!
저장소의 파일을보고 상단의 휴지통 아이콘을 클릭 한 다음 다른 웹 기반 편집과 마찬가지로 제거를 커밋하십시오.
그런 다음 git pull
로컬 리포지토리에서 " "파일을 삭제하면 파일도 로컬로 삭제됩니다.
이 답변을 git repo에서 파일을 삭제하는 방법은 무엇입니까?
(GitHub의에 파일이 있음을 언급 할 필요가 없을 것입니다 는 "자식의 repo"에서)
(커밋은 해당 파일의 삭제를 반영합니다) :
그런 식으로 사라졌습니다.
이러한 기능에 대한 도움말을 보려면 파일 작성 , 이동 , 이름 바꾸기 및 삭제 에 대한 도움말을 읽으십시오 .
참고 : 버전 제어 시스템이므로 나중에 파일을 복구해야 할 경우 Git은 항상 등을 가지고 있습니다.
마지막 문장은 삭제 된 파일이 여전히 히스토리의 일부이므로 GitHub 웹 인터페이스를 통해 아직 충분히 복구 할 수는 없습니다.
" Git repo에서 삭제 된 파일 복원 "을 참조하십시오 .
이것은 나를 위해 일한 유일한 옵션입니다.
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'
참고 : * .sql을 파일 이름 또는 파일 형식으로 바꾸십시오. 이것은 모든 커밋을 거치고이 파일 형식을 제거하기 때문에 매우주의하십시오.
편집 :주의하십시오-이 명령 후에는 밀거나 당길 수 없습니다-당신은 '관련되지 않은 기록'에 대한 거부를 볼 수 있습니다 'git push --force -u origin master'를 사용하여 밀거나 당길 수 있습니다
git push --force -u origin master
더 일반적으로 git help
다음과 같은 간단한 질문에 도움이됩니다.
zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]
The most commonly used git commands are:
add Add file contents to the index
:
rm Remove files from the working tree and from the index
git help
혼란 스럽지만 간단한 것에는 좋습니다 :)
rm
위해 파일 을 준비한다고 말하는 것이 훨씬 덜 혼란 스럽다고 생각합니다.
리포지토리에서 파일을 삭제하지만 파일 시스템에 그대로 두려면 (추적되지 않음) :
bykov@gitserver:~/temp> git rm --cached file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt from the repo"
repo 및 파일 시스템에서 파일을 삭제하려는 경우 다음 두 가지 옵션이 있습니다.
파일에 색인에서 준비된 변경 사항이없는 경우 :
bykov@gitserver:~/temp> git rm file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt"
파일이 색인에서 단계적으로 변경된 경우 :
bykov@gitserver:~/temp> git rm -f file1.txt
bykov@gitserver:~/temp> git commit -m "remove file1.txt"
git rm
지금부터는이 브랜치의 파일 만 제거하지만, 기록에 남아 있으며 git은이를 기억합니다.
git filter-branch
다른 사람들이 여기에서 언급했듯이 올바른 방법은입니다 . 브랜치 히스토리에서 모든 커밋을 다시 작성하여 해당 파일을 삭제합니다.
그러나 그렇게 한 후에도 git은 reflog, remotes, tag 등에 참조가 있기 때문에 그것을 기억할 수 있습니다.
한 번에 완전히 제거하려면 사용하는 것이 좋습니다. git forget-blob
간단 git forget-blob file1.txt
합니다.
이렇게하면 모든 참조가 제거 git filter-branch
되고 마지막으로 git 가비지 수집기 git gc
를 실행하여 리포지토리 에서이 파일을 완전히 제거합니다.
참고 : git에서만 파일을 삭제하려면 아래를 사용하십시오.
git rm --cached file1.txt
하드 디스크에서도 삭제하려는 경우 :
git rm file1.txt
폴더를 제거하려면 (폴더에 파일이 거의 없을 수 있음) 다음과 같이 재귀 명령을 사용하여 제거해야합니다.
git rm -r foldername
다른 폴더 안의 폴더를 제거하려면
git rm -r parentFolder/childFolder
그런 다음, 당신은 할 수 commit
와 push
평소. 그러나 삭제 된 폴더를 복구하려면 다음을 수행하십시오 .git에서 삭제 된 파일을 복구 할 수 있습니다.
문서에서 :
git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] [--quiet] [--] <file>…
옵션
<file>…
Files to remove. Fileglobs (e.g. *.c) can be given to remove all matching files. If you want Git to expand file glob characters, you
쉘 이스케이프해야 할 수도 있습니다. 디렉토리의 모든 파일과 재귀 적으로 모든 하위 디렉토리를 제거하기 위해 선행 디렉토리 이름 (예 : dir / file1 및 dir / file2를 제거하는 dir)을 지정할 수 있지만, -r 옵션을 명시 적으로 지정해야합니다.
-f
--force
Override the up-to-date check.
-n
--dry-run
Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.
-r
Allow recursive removal when a leading directory name is given.
--
This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken for
명령 줄 옵션).
--cached
Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.
-무시 불일치
Exit with a zero status even if no files matched.
-q
--quiet
git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.
repo에서 파일을 제거한 후 BFG Repo-Cleaner 를 git rm
사용 하여 repo 기록에서 파일을 완전하고 쉽게 제거 할 수 있습니다.
실수로 내 '변경된 파일'목록을 오염시키고 싶지 않은 저장소에 obj 및 bin 파일이 있습니다.
그들이 리모콘에 갔다는 것을 알게 된 후에 이것을 추가하여 무시했습니다..gitignore
/*/obj
/*/bin
문제는 이미 원격에 있으며 변경되면 변경으로 팝업되어 변경된 파일 목록을 오염시킵니다.
표시를 중지하려면 원격 저장소에서 전체 폴더를 삭제해야합니다.
명령 프롬프트에서 :
C:\repos\MyRepo
)C:\repos\MyRepo\SSIS
)git rm -r -f obj
git commit -m "remove obj folder"
13 개의 파일이 315222 삭제 되었다는 경고 메시지가 나타 납니다.
그런 다음 CMD 라인을 조회하고 싶지 않기 때문에 Visual Sstudio를 방문하여 리모컨에 적용하기 위해 동기화를 수행했습니다.
설명서 에 따르면 .
git rm --cached giant_file
중요한 데이터와 관련하여 파일을 제거했다고 말하지 말고 마지막으로 알려진 커밋에 파일을 포함 시키십시오.
0. 마지막 커밋 수정
git commit --amend -CHEAD
모든 git history에서 파일을 삭제하려면 설명서 에 따라 다음을 수행해야합니다.
1. 지역 기록에서 삭제
git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \ --prune-empty --tag-name-filter cat -- --all
# Replace PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA with the path to the file you want to remove, not just its filename
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "Add YOUR-FILE-WITH-SENSITIVE-DATA to .gitignore"
3. 리모컨에서 제거해야하는 경우
git push origin --force --all
4. 태그 릴리스에서 제거해야하는 경우 :
git push origin --force --tags
로컬 리포지토리에 저장하지 않고 git repo에 파일을 저장하는 경우 웹 인터페이스를 통해 git repo에서 파일을 열고 인터페이스의 오른쪽 모서리에서 삭제 버튼을 찾으십시오. 인터페이스 삭제 옵션을 보려면 여기를 클릭하십시오.
git rm
정답이지만 파일은 여전히 기록에 있습니다. 민감한 정보가 포함되어있는 파일을 제거하려면보다 과감한 작업을 수행해야합니다. (특히 이미 푸시 한 콘텐츠에 대한 기록 변경은 과감한 조치이므로 가능하면 피해야합니다.)