programing

준비 영역에서 단일 파일을 제거하려면 어떻게 해야 합니까(추가 취소)?

mailnote 2023. 5. 16. 22:52
반응형

준비 영역에서 단일 파일을 제거하려면 어떻게 해야 합니까(추가 취소)?

상황:인덱스에 이미 파일이 있는 Git 저장소가 있습니다.여러 파일을 변경하고 Git을 열고 "Git add"를 사용하여 이러한 파일을 준비 영역에 추가합니다.

질문:이러한 파일 중 하나를 준비 영역에서 제거하면서 인덱스에서 제거하거나 파일 자체의 변경 내용을 실행 취소하지 않는 방법은 무엇입니까?

만약 내가 질문을 올바르게 이해한다면, 당신은 단지 "실행을 취소"하고 싶을 뿐입니다.git add그것은 그 파일에 대해 행해졌습니다.

준비 영역에서 단일 파일을 제거해야 하는 경우

git reset HEAD -- <file>

준비 영역에서 전체 디렉토리(폴더)를 제거해야 하는 경우,

git reset HEAD -- <directoryName>

수정 사항은 유지됩니다.을 할 때git status파일이 수정되었지만 아직 준비되지 않은 것으로 다시 표시됩니다.

자세한 내용은 man 페이지를 참조하십시오.

git rm --cached FILE

,

git rm -r --cached CVS */CVS

git reset <file>

이전의 커밋이 있는지 여부에 관계없이 작동합니다.

그래서, 팀 헤니건의 대답을 약간 수정했습니다. 파일 이름 앞에 사용해야 합니다.다음과 같이 표시됩니다.

git reset HEAD -- <file>
git reset filename.txt

파일 이름에 수정 사항이 있는 경우.txt, 실수로 스테이징에 추가했으며 스테이징에서 파일을 제거하려고 하지만 변경 사항을 잃지는 않습니다.

Git의 최신 버전에는 다음이 있습니다.git restore --staged <file>.

를 할 때.git status 버전 Git와 함께.2.26.2.windows.1또한 다음과 같이 준비하지 않는 것이 좋습니다.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)

( 게시물은 이전 버전에서는git reset HEAD되었습니다).

사이의 차이점을 설명하는 이 게시물을 강력하게 추천할 수 있습니다.git revert,git restore그리고.git reset 추매 개수변에 대한 변수:git restore.

파일에 대한 변경사항의 일부만 제거하려는 경우 다음을 사용할 수 있습니다.

git reset -p

또는

git reset -p <file_name>

▁reverse▁is▁basically의 역순입니다.git add -p선택한 변경 사항만 준비 영역에서 제거됩니다.실수로 추가한 것을 "추가 취소"하는 데 매우 유용합니다.

@CB Bailey가 언급했듯이 지수의 개념과 혼동했을 것이라고 생각합니다.

준비 영역이 인덱스입니다.

준비 디렉터리와 인덱스를 동일한 것으로 간주할 수 있습니다.
그래서, @Tim Henigan의 대답처럼, 나는 생각합니다:

당신은 그저 "해방"하고 싶을 뿐입니다.git add그것은 그 파일에 대해 행해졌습니다.



제 이 있습니다: 답대은이렇니다습제다니습▁here렇이:.

일반적으로 이미 언급한 다른 답변과 같이 두 가지 방법으로 스테이지 작업을 실행 취소할 수 있습니다.

git reset HEAD <file>

그리고.

git rm --cached <file>

하지만 무엇이 다른가요?

파일이 준비되어 작업 디렉토리에도 있다고 가정합니다.git rm --cached <file>파일을 준비 디렉토리에서 제거하고 작업 디렉토리에 보관하려는 경우.그러나 이 작업은 준비 디렉토리에서 파일을 제거할 뿐만 아니라 파일을 다음과 같이 표시합니다.deleted준비 디렉토리에서, 사용하는 경우

git status

이 작업 후 다음과 같은 내용이 표시됩니다.

        deleted:    <file>

준비 디렉토리에서 파일을 제거한 기록입니다.해당 레코드를 유지하지 않고 파일의 이전 단계 작업만 실행 취소하려면 다음을 사용합니다.git reset HEAD <file>대신.


의 끝 -------------------------------------------------------------------------------

PS: 다음과 같은 답변이 언급되었습니다.

git checkout -- <file>

이 명령은 파일이 준비되었지만 준비된 후 작업 디렉터리에서 파일이 수정된 경우를 위한 것입니다. 이 작업을 사용하여 준비 디렉터리에서 작업 디렉터리의 파일을 복원합니다.즉, 이 작업 후에는 준비 디렉토리가 아닌 작업 디렉토리에서 변경사항이 발생합니다.

전이후 이후2.23Git는 다음을 소개했습니다.git restore명령을 실행할 수 있습니다.공식 문서 인용:

복원 원본의 일부 내용을 사용하여 작업 트리에서 지정된 경로를 복원합니다.경로가 추적되지만 복원 원본에 없는 경우 원본과 일치하도록 경로가 제거됩니다.

이 을 " 또이명내수있복습다니원할을용인의한덱"로 복원하는 데 사용할 수도 .--staged 작 업 트 스 를 리 와 복 니--staged --worktree.

호할수있다니습출다▁invoke니▁so▁can있습▁you를 호출할 수 있습니다.git restore --staged <path>파일의 스테이징을 해제하고 변경한 내용을 유지합니다.파일이 준비되지 않은 경우 변경한 내용이 모두 손실됩니다.

git rm --cached파일 압축 패턴도 사용할 수 있습니다.

여기 보세요.

을 할 때는.git statusGit는 스테이징을 해제하는 방법을 알려줍니다.

Changes to be committed: (use "git reset HEAD <file>..." to unstage).

그렇게git reset HEAD <file>저를 위해 일했고 변화는 변하지 않았습니다.

원하는 항목:

  • 단일 파일에 영향을 줍니다.

  • 준비 영역에서 파일 제거

  • 인덱스에서 단일 파일 제거 안 함

  • 변경 내용 자체를 취소하지 않음

그리고 해결책은.

git reset HEAD file_name.ext

또는

git reset HEAD path/to/file/file_name.ext

당신은 파일의 디렉토리에 있어야 하고 터미널에 다음을 입력해야 합니다.

git checkout -- <file>

제 생각에 당신은 할 수 있을 것 같습니다.

git restore --staged <path/to/file_name>

추적된 많은 파일을 변경했지만 일부 파일만 준비하려는 경우

git add .

추적된 모든 파일을 스테이징하기 때문에 항상 적합하지는 않습니다(변경 사항을 자신에게만 보관하고 원격 저장소에 스테이징하지 않으려는 경우도 있습니다).

여러 가지를 하는 것도 이상적이지 않습니다.

git add path/to/file1 path/to/file2

중첩된 디렉토리가 많은 경우(대부분의 프로젝트에서 해당됨) - 성가시게 됩니다.

이때 Git GUI가 도움이 됩니다(아마도 제가 사용할 때만).Git GUI를 열기만 하면 준비된 파일 섹션과 준비되지 않은 파일 섹션이 표시됩니다.스테이징 해제할 준비된 섹션에서 파일을 선택하고 를 누릅니다.

Ctrl+U(창용)

그들의 무대를 해체하는 것.

내 샘플:

$ git status
On branch feature/wildfire/VNL-425-update-wrong-translation
Your branch and 'origin/feature/wildfire/VNL-425-update-wrong-translation' have diverged,
and have 4 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   ShopBack/Source/Date+Extension.swift
    modified:   ShopBack/Source/InboxData.swift
    modified:   ShopBack/en.lproj/Localizable.strings

아시다시피

> Changes to be committed:
>       (use "git reset HEAD <file>..." to unstage)

당신은 파일의 디렉토리에 있어야 하고 터미널에 다음을 입력해야 합니다.

git reset HEAD .

하나의 파일만 재설정하면 된다고 가정합니다.

모든 항목을 한 번에 분할하려면 이 명령을 실행합니다.

git reset HEAD -- .

git checkout -- <file>

준비 영역에서 파일을 제거하는 것이 완벽하게 작동합니다.

언급URL : https://stackoverflow.com/questions/1505948/how-do-i-remove-a-single-file-from-the-staging-area-undo-git-add

반응형