Git 저장소에 "file1.txt"
라는 파일을 추가했습니다. dir1
및 dir2
라는 디렉터리를 몇 개 추가하고 Git 저장소에 커밋했습니다.
이제 현재 저장소에는 "file1.txt"
, dir1
및 dir2
있습니다. dir1
및 dir2
와 같은 다른 사용자에게 영향을 주지 않고 "file1.txt"
를 어떻게 삭제할 수 있습니까?
질문자 :webminal.org
Git 저장소에 "file1.txt"
라는 파일을 추가했습니다. dir1
및 dir2
라는 디렉터리를 몇 개 추가하고 Git 저장소에 커밋했습니다.
이제 현재 저장소에는 "file1.txt"
, dir1
및 dir2
있습니다. dir1
및 dir2
와 같은 다른 사용자에게 영향을 주지 않고 "file1.txt"
를 어떻게 삭제할 수 있습니까?
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
는 리포지토리에서 파일을 제거하지만 로컬 파일 시스템에서도 삭제합니다 .
저장소에서 파일을 제거하고 로컬 파일 시스템에서 삭제하지 않으 려면 다음을 사용하십시오.
git rm --cached file.txt
아래 정확한 상황은 git을 사용하여 비즈니스 웹 사이트의 버전 관리를 유지하지만 "mickey" 디렉토리는 CAD 개발자와 개인 콘텐츠를 공유하기 위한 tmp 폴더였습니다. 그가 엄청난 파일을 필요로 할 때, 나는 링크되지 않은 비공개 디렉토리를 만들고 그가 브라우저를 통해 가져올 수 있도록 거기에 파일을 ftpd했습니다. 이 작업을 잊어 버리고 나중에 웹 사이트의 기본 디렉토리에서 git add -A
그 후 git status
는 커밋이 필요한 새 파일을 표시했습니다. 이제 git의 추적 및 버전 관리에서 삭제해야 했습니다...
아래 샘플 출력은 실수로 .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을 이해하는 데 도움이 되는 그래픽이 있습니다. "Pro Git" 책은 온라인에 있으며 많은 도움이 됩니다.
첫째, 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 저장소에서 삭제된 파일 복원 "을 참조하십시오.
이것은 나를 위해 일한 유일한 옵션입니다.
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch *.sql'
참고: *.sql을 파일 이름 또는 파일 유형으로 바꾸십시오. 이것은 모든 커밋을 거치고 이 파일 유형을 제거하므로 매우 주의하십시오.
편집: 주의하십시오 - 이 명령 후에는 푸시하거나 풀 수 없습니다. '관련 없는 기록'이 거부되는 것을 볼 수 있습니다. 'git push --force -u origin master'를 사용하여 푸시하거나 풀할 수 있습니다.
또한 제거할 폴더이고 후속 하위 폴더 또는 파일인 경우 다음을 사용합니다.
git rm -r foldername
더 일반적으로 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
리포지토리에서 파일을 삭제하지만 파일 시스템에는 그대로 두려면(추적되지 않음):
bykov@gitserver:~/temp> git rm --cached file1.txt bykov@gitserver:~/temp> git commit -m "remove file1.txt from the 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
해당 파일을 삭제하기 위해 분기 기록의 모든 커밋을 다시 작성합니다.
그러나 그렇게 한 후에도 reflog, remotes, 태그 등에 참조가 있을 수 있기 때문에 git은 이를 기억할 수 있습니다.
한 번에 완전히 없애고 싶다면 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 (eg *.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.
다른 방법은 rm 명령을 사용하여 로컬 폴더에서 파일을 삭제한 다음 변경 사항을 원격 서버에 푸시하려는 경우입니다.
rm file1.txt git commit -a -m "Deleting files" git push origin master
제 경우에는 몇 번의 커밋 후에 github에서 파일을 제거하려고 시도했지만 컴퓨터에 저장했습니다.
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch file_name_with_path' HEAD git push --force -u origin master
나중에 이 파일은 무시되었습니다.
특정 파일을 삭제하려면
자식 rm 파일 이름
단일 샷에서 재귀 적으로 디렉토리에서 추적되지 않은 모든 파일을 정리하려면
자식 청소 -fdx
Windows용 GitHub 애플리케이션이 있는 경우 5가지 간단한 단계로 파일을 삭제할 수 있습니다.
문서 에 따르면 .
git rm --cached file1.txt
민감한 데이터의 경우 파일을 제거했다고 말하지 말고 마지막으로 알려진 커밋에 포함하는 것이 좋습니다.
0. 마지막 커밋 수정
git commit --amend -CHEAD
문서 에 따라 모든 git 기록에서 파일을 삭제하려면 다음을 수행해야 합니다.
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
Johannchopin 이 편집 한 Greg Hewgill 의 답변은 기록에서 파일을 완전히 제거하는 데 신경 쓰지 않았기 때문에 도움이되었습니다. 제 경우에는 디렉토리 였으므로 내가 한 유일한 변경 사항은 다음을 사용하는 것입니다.
git rm -r --cached myDirectoryName
"git rm --cached file1.txt" 대신 ..뒤에:
git commit -m "deleted myDirectoryName from git" git push origin branch_name
Greg Hewgill 과 Johannchopin 에게 감사드립니다!
먼저 로컬 저장소에서 파일을 제거합니다.
git rm -r 파일 이름
또는 로컬 저장소에서만 파일을 제거하지만 파일 시스템에서는 제거하십시오.
git rm --cached 파일 이름
둘째, 변경 사항을 로컬 저장소에 커밋합니다.
git commit -m "unwanted files or some inline comments"
마지막으로 로컬 변경 사항을 원격 저장소로 업데이트/푸시합니다.
git push
git rm
이 충분하지 않고 기록에서 파일을 제거해야 하는 경우: git filter-branch
매뉴얼 페이지 자체에서 git-filter-repo 사용을 제안하고 오늘 이 작업을 수행해야 했기 때문에 다음을 사용하는 예가 있습니다. 그 도구. 예제 리포지토리 https://example/eguser/eg.git
저장소를 새 디렉토리에 git clone https://example/eguser/eg.git
원하지 않는 파일을 제외한 모든 것을 유지하십시오. git-filter-repo --path file1.txt --invert-paths
원격 저장소 원본을 다시 추가합니다. git remote add origin https://example/eguser/eg.git
. git-filter-repo
도구는 설계상 원격 원격 정보를 제거 하고 새로운 원격 저장소를 제안합니다(4번 항목 참조). 이것은 큰 공유 리포지토리에 적합하지만 이 예에서와 같이 새로 추가된 단일 파일을 제거하기에는 과도할 수 있습니다.
로컬의 내용이 만족스러우면 remote를 로컬로 교체하십시오.
git push --force -u origin master
. 변경된 이력으로 인해 강제가 필요합니다.
또한 유용한 --dry-run
옵션과 리포지토리 기록을 충전하고 변경하기 전에 팀 및 프로젝트 역학에 대한 링크된 매뉴얼에서 좋은 논의를 확인하십시오.
프로젝트 디렉토리로 이동하여 다음을 입력하십시오.
git filter-branch --tree-filter 'rm -f <deleted-file>' HEAD
그 후 모든 커밋에서 파일을 삭제하기 위해 --force를 누릅니다.
git push origin --force --all
제안된 옵션을 많이 시도했지만 아무 것도 작동하지 않는 것으로 나타났습니다(다양한 문제를 나열하지 않겠습니다). 내가 끝내고 효과가 있었던 것은 간단하고 직관적이었습니다.
git rm
을 사용하여 저장소에서 파일을 제거한 후 BFG Repo-Cleaner 를 사용하여 저장소 기록에서 파일을 완전하고 쉽게 지울 수 있습니다.
내 '변경된 파일' 목록을 오염시키고 싶지 않은 저장소에 실수로 만든 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로 가서 Sync를 수행하여 원격에 적용했습니다.
github 저장소에 있는 파일로 이동하면 Raw|Blame 옆에 삭제 아이콘이 표시되고 커밋 변경 버튼을 클릭하는 것을 잊지 마십시오. 그리고 파일이 삭제된 것을 볼 수 있습니다.
결정된 확장자에서 파일을 제거해야 하는 경우(예: 컴파일된 파일) 다음을 수행하여 모든 파일을 한 번에 제거할 수 있습니다.
git remove -f *.pyc
로컬 repo에 파일을 저장하지 않고 git repo에 파일을 저장하는 경우 웹 인터페이스를 통해 git repo에서 파일을 열고 인터페이스 오른쪽 모서리에 있는 삭제 버튼을 찾으면 됩니다. 인터페이스 삭제 옵션을 보려면 여기를 클릭하십시오.
출처 : http:www.stackoverflow.com/questions/2047465/how-can-i-delete-a-file-from-a-git-repository
Docker 컨테이너 내부에서 머신의 로컬 호스트에 어떻게 연결합니까? (0) | 2021.12.02 |
---|---|
C# 자동 속성에 초기 값을 제공하는 가장 좋은 방법은 무엇입니까? (0) | 2021.12.02 |
Vim에서 문자를 줄 바꿈으로 바꾸는 방법 (0) | 2021.12.02 |
사용자가 목록 항목 위로 마우스를 가져갈 때 커서를 손으로 변경하는 방법은 무엇입니까? (0) | 2021.12.01 |
"???!???!" 연산자는 C에서 어떤 용도인가요? (0) | 2021.12.01 |