Git에서 파일을 분리하는 방법은 왜 두 가지입니까?
은 git를 제안합니다.git rm --cached
) 을 git reset HEAD file
떤떤것 을제 ?용 ??? ???
D:\code\gt2>git init
Initialized empty Git repository in D:/code/gt2/.git/
D:\code\gt2>touch a
D:\code\gt2>git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# a
nothing added to commit but untracked files present (use "git add" to track)
D:\code\gt2>git add a
D:\code\gt2>git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: a
#
D:\code\gt2>git commit -m a
[master (root-commit) c271e05] a
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
D:\code\gt2>touch b
D:\code\gt2>git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# b
nothing added to commit but untracked files present (use "git add" to track)
D:\code\gt2>git add b
D:\code\gt2>git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
git rm --cached <filePath>
는 파일을 분할 해제하는 것이 아니라 실제로 repo에서 파일을 삭제(이미 커밋된 파일 포함)하지만 파일은 작업 트리에 남습니다(추적되지 않은 파일이 표시됩니다).
git reset -- <filePath>
는 지정된 파일의 단계적 변경을 모두 해제합니다.
, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.git rm --cached
스테이징된 새 파일에는 커밋된 적이 없기 때문에 기본적으로 스테이징을 해제한 것처럼 보입니다.
2.24
의 git에서는, 「Git」를 사용할 수 .git restore --staged
git reset
. git docs를 참조해 주세요.
git rm --cached
인덱스에서 파일을 제거하는 데 사용됩니다., "repo"는git rm --cached
그러면 파일이 인덱스에서 삭제되고 작업 디렉터리에 남겨집니다.회답하다기본적으로 커밋 후에는 파일의 버전을 해제하고 로컬 복사본을 보관합니다.
git reset HEAD file
로는 ( 「」)를 사용하고 .--mixed
flag)는 파일이 이미 repo에 있는 경우 파일의 인덱스 버전을 repo(HEAD)의 버전으로 대체하여 실질적으로 파일의 수정 내용을 해제한다는 점에서 다릅니다.
변환되지 않은 파일의 경우 파일이 HEAD에 없기 때문에 파일 전체를 분할 해제합니다. 측면에서는, 「」를 참조해 주세요.git reset HEAD file
★★★★★★★★★★★★★★★★★」git rm --cached
동일하지만 동일하지 않습니다(이미 repo에 있는 파일의 경우 설명 참조).
의 질문에 Why are there 2 ways to unstage a file in git?
- git에서 어떤 일을 할 수 있는 유일한 방법은 결코 없습니다.그것이 장점입니다:)
간단히 말하면:
git rm --cached <file>
git의 파일 추적을 완전히 정지시킵니다(일반 파일과는 달리 파일 시스템에 파일을 저장합니다).git rm
*)git reset HEAD <file>
는 마지막 커밋 이후 파일에 대한 변경을 모두 해제합니다(단, 명령어 이름이 시사하는 것과 달리 파일시스템에서는 원래대로 되돌리지 않습니다**).파일은 리비전 관리 하에 있습니다.
이 이전에 않은 방금 있던 하고 있는 )git add
두 는 같은 에 '두 가지 수 있다'에드 첫 번째 ed)에서는 '두 가지 방법으로 .
* * @Drew에 T가 그의 답변에서 언급한 경고에 유의하십시오.git rm --cached
저장소로 이전에 커밋된 파일의 경우.이 질문의 맥락에서, 파일이 방금 추가되었고 아직 커밋되지 않은 경우에는 걱정할 필요가 없습니다.
** 이름 때문에 git reset 명령어를 사용하는 것이 창피할 정도로 오랫동안 무서웠습니다.그리고 지금도 저는 자주 구문을 검색하여 실수를 하지 않도록 하고 있습니다.(업데이트:드디어 의 사용법을 tldr 페이지에 정리했습니다.그래서 이제 그 사용법을 더 잘 이해할 수 있게 되었고, 자세한 내용을 잊어버렸을 때를 위한 빠른 레퍼런스를 얻을 수 있게 되었습니다.)
이 스레드는 조금 오래되었지만 아직 직관적인 문제가 아니기 때문에 약간의 데모를 추가하고 싶습니다.
me$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: to-be-added
# modified: to-be-modified
# deleted: to-be-removed
#
me$ git reset -q HEAD to-be-added
# ok
me$ git reset -q HEAD to-be-modified
# ok
me$ git reset -q HEAD to-be-removed
# ok
# or alternatively:
me$ git reset -q HEAD to-be-added to-be-removed to-be-modified
# ok
me$ git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: to-be-modified
# deleted: to-be-removed
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# to-be-added
no changes added to commit (use "git add" and/or "git commit -a")
git reset HEAD
)-q
에 대한 됩니다.)는 변경된 파일에 대한 경고를 표시합니다.종료 코드는 1로 스크립트에서 오류로 간주됩니다.
집::git checkout HEAD to-be-modified to-be-removed
는 스테이징에서 변경을 합니다.
Update git 2.23.0 :명령어는 수시로 변경됩니다.지금이다,git status
라고 말합니다
(use "git restore --staged <file>..." to unstage)
세 가지 유형의 변화에 모두 대응합니다.
커밋하고 싶지 않은 파일을 실수로 스테이징한 경우 변경 내용을 확실히 유지하려면 다음을 사용할 수도 있습니다.
git stash
git stash pop
풀 요청 기능 브랜치작성을 이 됩니다.git stash ; git checkout -b <feature> ; git stash pop
를 참조해 주세요.
2에서는 2.2를 사용할 수 .git restore --staged <file_name>
. : 한함께 사용합니다 예를 들면, 「이러다」는, 「이러다」는 「.
git restore --staged abc.html
모든 파일을 한 번에 분리하려면 다음과 같은 작업을 수행할 수 있습니다.
git restore --staged .
스페이스와 닷(.)에 주의해 주세요.이것은, 스테이징 된 모든 파일을 고려해 주세요.
문제가 되는 파일이 이미 repo에 있고 버전 제어 하에 있는 경우 다음 2개의 명령어는 몇 가지 미묘한 차이가 있습니다(이전 커밋된 경우 등).
git reset HEAD <file>
는 현재 커밋의 파일을 분할 해제합니다.git rm --cached <file>
향후 커밋을 위해서도 파일의 스테이징을 해제합니다.git add <file>
.
그리고 한 가지 더 중요한 차이가 있습니다.
- " " " 후
git rm --cached <file>
리모트에 브런치를 푸시하면 로컬 작업 세트에서는 파일이 추적 해제되어 버립니다(즉, 폴더에서 물리적으로 삭제되지 않음).
의 각 URL, 또는 설정을 갖는 「」를 사용하고 있는 는, 「URL, IP」를 사용합니다.git rm --cached <file>
브런치를 풀하는 사람은 수동으로 설정을 다시 작성해야 합니다.또한 리모트에서 브런치를 풀하는 사람만 영향을 받기 때문에 사용자가 설정을 전송하고 IP 설정(등)으로 다시 편집할 수 있습니다.
를 들어, 여러분이라고 칩시다.stage
를 경유git add <folder>
는 「」를 실행하고 있을 때 ).git status
변경 내용은 제외된 파일 내에 보관합니다(작업 중이었고 커밋할 준비가 되어 있지 않지만 작업을 잃고 싶지 않습니다).다음과 같이 간단하게 할 수 있습니다.
git reset <file>
git status
간에, 어떤 파일이 있든 알 수 reset
unstaged
은 당신이 """ "" " " " " " " " " " " " " " " " " 。added
아직에 staged
참조해 주세요.
1.
D:\code\gt2>git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: a
(분할을 해제하려면 "syslog rm --syslog..."를 사용합니다.)
git은 포인터의 시스템입니다.
포인터를 로 변경하기 위한 커밋이 아직 없습니다.
가리키고 있는 버킷에서 파일을 꺼내는 유일한 방법은 변경을 감시하도록 git에 지시한 파일을 삭제하는 것입니다.
2.
D:\code\gt2>git commit -m a
[master (root-commit) c271e05] a
0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 a
git -m a를 커밋하다
- 당신은 약속했어요, '진정'
3.
D:\code\gt2>git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: b
#
("git reset HEAD..."를 사용하여 분리)
- 이 시점에서 코드로 커밋을 실시했습니다.
- 이제 포인터를 '마지막 저장으로 되돌리기' 커밋으로 리셋할 수 있습니다.
사용방법:
git reset HEAD <filename>
하면 할 수 있습니다.이것에 의해, 필요에 따라서 브랜치를 변경할 수 있습니다.git add
신른모든 변경 내용이 유지됩니다.
버전 2.23 이상의 경우에만
""를 사용할 수 .git restore --staged <file>
unstage
파일을 표시합니다.
아무도 git reflog(http://git-scm.com/docs/git-reflog)에 대해 언급하지 않았다니 놀랍다.
# git reflog
<find the place before your staged anything>
# git reset HEAD@{1}
reflog는 repo의 변경을 추적할 뿐만 아니라 사용자 액션(풀, 다른 브랜치 체크아웃 등)을 추적하여 실행 취소할 수 있는 git 이력입니다.따라서 실수로 스테이징된 파일을 스테이징 해제하지 않고 파일을 스테이징하지 않은 시점으로 되돌릴 수 있습니다.
은 것은은 this this this this this this this this this this와 비슷합니다.와 .git reset HEAD <file>
하지만 경우에 따라서는 더 세분화될 수 있습니다.
죄송합니다. 질문에 대한 답변이 아니라 제가 자주 사용하는 파일(Ryan Stewart와 waldyhorous의 답변과 같은 파일)을 정리하는 또 다른 방법을 알려드립니다.
파일 스테이징 해제(git 추가 실행 취소)
git restore --staged file.js # file.js의 마지막 버전을 repo에서 인덱스로 복사합니다.
로컬 변경 폐기
git restore file.js # file.js를 인덱스에서 작업 디렉토리에 복사합니다.
git restore file1.js file2.js # 작업 디렉토리의 여러 파일을 복원합니다.
git restore. # 모든 로컬 변경을 폐기합니다(추적되지 않은 파일 제외).
git clean -fd # 추적되지 않은 모든 파일을 삭제합니다.
에는 ...인 것 .아아아아아아아아아아아아아아아아아.git rm --cached <file>
는, 하지 않고 이 디렉토리는, 플레인 「」의 입니다.git rm <file>
로 둘 다 할 수 .rm <file>
버전 관리를 삭제하지 않고 디렉토리에서 파일을 삭제합니다.
언급URL : https://stackoverflow.com/questions/6919121/why-there-are-two-ways-to-unstage-a-file-in-git
'IT' 카테고리의 다른 글
항목이 업데이트될 때 데이터 그리드가 업데이트되지 않는 이유소스가 변경되었습니까? (0) | 2023.04.28 |
---|---|
필터링된 목록을 VBA로 루프하는 가장 쉬운 방법은 무엇입니까? (0) | 2023.04.28 |
Git: 분기를 체크아웃할 수 없음 - 오류: pathspec '...'이(가) git에 알려진 파일과 일치하지 않습니다. (0) | 2023.04.23 |
blockblob 업로드 및 content type 설정 (0) | 2023.04.23 |
EPplus를 사용하여 Excel로 DataTable 내보내기 (0) | 2023.04.23 |