programing

최신 커밋에서 파일 제거

cafebook 2023. 4. 13. 21:08
반응형

최신 커밋에서 파일 제거

최신 커밋에서 파일을 삭제하려면 어떻게 해야 합니까?

잘못 커밋된 파일을 이전 커밋에서 스테이징 영역으로 되돌리는 문제이기 때문에 다른 답변은 잘못된 것 같습니다.이것은 Paritosh Singh가 제안한 대로 할 수 있다.

git reset --soft HEAD^ 

또는

git reset --soft HEAD~1

그런 다음 불필요한 파일을 리셋하여 커밋에서 제외합니다(이전 방식).

git reset HEAD path/to/unwanted_file

Git 고 git : Git 후 git git git git 。2.23.0다음 중 하나를 할 수 있습니다(새로운 방법).

git restore --staged path/to/unwanted_file

다시 커밋하면 같은 커밋메시지를 재사용할 수도 있습니다.

git commit -c ORIG_HEAD  

주목!이전 커밋에서 파일을 삭제하고 디스크에 보관하는 경우 바로 위의 juzzlin의 답변을 읽어 보십시오.

이것이 마지막 커밋이며 로컬 리모트저장소에서 파일을 완전히 삭제하려면 다음 작업을 수행합니다.

  1. git rm <file>
  2. flag : " " " " " " commit commit: 。git commit --amend

수정 플래그는 git에게 다시 커밋하도록 지시하지만 (두 브랜치를 병합하는 의미가 아님) 이 커밋을 마지막 커밋과 함께 "merge"합니다.

되어 있는 바와 같이, 「 」를 해 주세요.git rm, '이렇게'를 하는 것 같습니다.rm★★★★★★★★★★★★★★★★!

수용된 답변에서 알 수 있듯이 커밋 전체를 리셋함으로써 이를 수행할 수 있습니다.그러나 이것은 다소 고압적인 접근이다.
이를 위한 보다 깔끔한 방법은 커밋을 유지하고 변경된 파일을 커밋에서 삭제하는 것입니다.

git reset HEAD^ -- path/to/file
git commit --amend --no-edit

git reset는 이전 커밋에서와 같이 파일을 가져와 인덱스로 스테이징합니다.작업 디렉토리의 파일은 변경되지 않았습니다.
git commit그러면 인덱스가 커밋되고 현재 커밋으로 스쿼시됩니다.

기본적으로 이전 커밋에 있던 파일 버전을 가져와 현재 커밋에 추가합니다.이것에 의해, 순변경은 발생하지 않기 때문에, 파일은 커밋으로부터 실질적으로 삭제됩니다.

기존 답변에서는 모두 마지막 커밋에서 원하지 않는 파일을 제거하는 것에 대해 이야기하고 있습니다.

이전 커밋에서 원하지 않는 파일을 제거하고(밀어서도), 작업 때문에 불필요한 새 커밋을 만들지 않으려면 다음을 수행합니다.

  1. 파일이 에 준거하는 커밋을 찾습니다.

git log --graph --decorate --oneline

  1. 다음 방법으로 커밋된 체크 아웃

git checkout <commit_id> <path_to_file>

많은 파일을 삭제하려면 이 작업을 여러 번 수행할 수 있습니다.

3.

git commit -am "remove unwanted files"

4.

파일이 잘못 추가된 커밋의 commit_id를 찾습니다.여기서 "35c23c2"라고 하겠습니다.

git rebase 35c23c2~1 -i // notice: "~1" is necessary

이 명령은 설정에 따라 편집기를 엽니다.기본값은 vim 입니다.글로벌 git 에디터를 변경하려면 , 를 사용합니다.

git config --global core.editor <editor_name>

5.

커밋한 파일을 을 잘못된 커밋의 「하고, 를 「」( 「35c23c2」)로 합니다.fixup:

pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files

파일을 저장하고 나면 괜찮을 거예요.

6.

끝내려면:

git push -f

불행히도 충돌이 발생하면 수동으로 해결해야 합니다.

서버에서 변경을 푸시하지 않은 경우 사용할 수 있습니다.

git reset --soft HEAD~1

모든 변경을 리셋하여 1회의 커밋백으로 되돌립니다.

변경을 푸시한 경우 @CharlesB의 답변에 따라 절차를 수행합니다.

rm을 사용하여 파일을 삭제하면 삭제됩니다!

항상 삭제가 아닌 git에서 커밋에 추가합니다.따라서 이 경우 파일을 첫 번째 커밋 이전의 상태로 되돌리고(파일이 새로운 경우 삭제 'rm' 액션일 수 있습니다) 다시 커밋하면 파일이 실행됩니다.

파일을 이전 상태로 되돌리려면:

    git checkout <commit_id> <path_to_file>

또는 원격 HEAD 상태로 되돌리려면:

    git checkout origin/master <path_to_file>

커밋을 수정하면 파일이 목록에서 사라집니다(디스크에서 삭제되지 않았습니다).

git checkout HEAD~ path/to/file
git commit --amend

이치노
A, B, C는 3번입니다.커밋 B에는 커밋되어서는 안 되는 파일이 포함되어 있습니다.

git log  # take A commit_id
git rebase -i "A_commit_ID" # do an interactive rebase
change commit to 'e' in rebase vim # means commit will be edited
git rm unwanted_file
git rebase --continue
git push --force-with-lease <branchName>    

다음은 OP가 요청한 파일만 분할합니다.

git reset HEAD^ /path/to/file

다음과 같은 것을 볼 수 있습니다.

커밋할 변경 사항: ('git reset HEAD...'를 사용하여 스테이징 해제)

수정: /path/to/file

커밋에 대해 스테이징되지 않은 변경: (커밋할 내용을 업데이트하려면 "git add..."를 사용합니다) (작업 디렉토리의 변경 내용을 취소하려면 "git checkout --..."를 사용합니다.)

수정: /path/to/file

  • "Changes to be commit"은 커밋 전 파일의 이전 버전입니다.파일이 존재하지 않는 경우는, 삭제라고 생각됩니다.이 변경을 커밋하면 변경 내용을 브랜치 내의 파일로 되돌리는 리비전이 있습니다.
  • "commit을 위해 스테이징되지 않은 변경"은 커밋된 변경사항이며 파일의 현재 상태입니다.

이 시점에서 다른 버전으로 재설정하는 등 파일에 대해 원하는 작업을 수행할 수 있습니다.

커밋할 준비가 되면:

git commit --amend -a

또는 (아직 커밋하고 싶지 않은 다른 변경이 있는 경우)

git commit add /path/to/file
git commit --amend

간단히 시도해 보세요.

git reset --soft HEAD~1

새로운 커밋을 작성합니다.

하지만 기가 막힌 소프트웨어 '깃크라켄'이 있습니다.git으로 작업하기 쉬워집니다.

git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "removed unwanted file from git"

로컬 파일은 그대로 남습니다.로컬에서도 파일을 원하지 않으면 --cached 옵션을 건너뛸 수 있습니다.

모든 작업이 로컬 지점에 있는 경우 파일을 나중에 커밋으로 유지해야 합니다.이력을 깨끗하게 하는 것과 마찬가지로, 보다 간단한 방법은 다음과 같습니다.

git rm --cached <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit --squash <commit_id>
git add <file_to_remove_from_commit_<commit_id>_which_added_file>
git commit -m "brand new file!"
git rebase --interactive <commit_id>^

그러면 복잡한 명령어를 기억하거나 메시지나 입력을 커밋할 필요 없이 쉽게 기본 재설정을 완료할 수 있습니다.

GIT GUI를 사용하면 이전 커밋에서 파일을 쉽게 삭제할 수 있습니다.

공유 브런치가 아니고, 이력을 재기입해도 문제가 없는 경우는, 다음의 조작을 실행합니다.

git gui citool --amend

잘못 커밋된 파일의 체크를 해제하고 "Commit"를 클릭할 수 있습니다.

여기에 이미지 설명 입력

파일은 커밋에서 삭제되지만 디스크에 저장됩니다.따라서 실수로 파일을 추가한 후 체크박스를 끄면 추적되지 않은 파일 목록에 표시됩니다(또한 실수로 파일을 수정한 후 체크박스를 끄면 커밋을 위해 스테이징되지 않은 변경 목록에 표시됩니다).

커밋을 보존하고 싶은 경우(상세한 커밋메시지를 작성하는데 이미 시간이 걸렸을 가능성이 있습니다), 커밋에서 파일을 삭제하기만 하면 됩니다.저장소에서는 삭제하지 않습니다.

git checkout origin/<remote-branch> <filename>
git commit --amend

파일을 로컬로 보관합니다(git commit에서 삭제).

사용할 수 있는 파일을 보관하려면--cached다음과 같이 합니다.

git rm --cached filename

여기에 이미지 설명 입력

로컬 파일 삭제(및 git commit에서 삭제)

또는 파일을 삭제하려면 다음 명령을 사용하십시오.

git rm filename

여기에 이미지 설명 입력

추가 명령을 실행해야 했기 때문에 상위 답변을 보완하고 싶었습니다.

git reset --soft HEAD^
git checkout origin/master <filepath>

건배!

다음 명령어 시퀀스를 수행합니다.

//to remove the last commit, but preserve changes  
git reset --soft HEAD~1

//to remove unneded file from the staging area  
git reset HEAD `<your file>` 

//finally make a new commit  
git commit -m 'Your message'

이전 커밋에서 파일을 제거하려면 필터를 사용하십시오.

git filter-branch --prune-empty --index-filter 'git rm --ignore-unmatch --cached "file_to_be_removed.dmg"'

다음 오류가 표시되는 경우:

새 백업을 생성할 수 없습니다.이전 백업이 이미 refs/original/f로 백업을 강제로 덮어씁니다.

로컬 리포트에서 참조 백업을 삭제하기만 하면 됩니다.

$ rm -rf .git/refs/original/refs
git reset --soft HEAD~1. 

그러면 로컬 저장소의 마지막 커밋이 취소되고 커밋을 수행하기 전과 같이 모든 것이 스테이징 영역으로 돌아갑니다.그리고 Git UI 툴(TortoiseGit, Git UI, Git Extensions 등)을 사용하여 커밋하고 싶지 않은 파일을 분리한 후 다시 커밋합니다.

나에게 효과가 있었지만, 여전히 더 나은 해결책이 있어야 한다고 생각하는 것:

$ git revert <commit_id>
$ git reset HEAD~1 --hard

삭제할 변경은 다른 커밋에 남겨두고 다른 변경 내용을 확인합니다.

$ git commit --amend // or stash and rebase to <commit_id> to amend changes

git reset --soft HEAD^커밋을 되돌리고, 입력했을 때git status의 조작에 대해 설명합니다.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
  1. git reset --soft HEAD~1
  2. git reset HEAD /file/to/delete
  3. git rm --cached /file/to/delete
  4. git commit --amend -m "your message"
  • 키포인트는 --syslog입니다.

다음 작업을 수행할 수 있습니다.

git push -u origin master

사실 git rebase interactive 모드를 사용하는 것이 더 빠르고 쉬운 방법이라고 생각합니다.

git rebase -i head~1  

(혹은 head~4, 어디까지 가고 싶어?)

'pick' 대신 'edit'을 사용합니다.편집이 얼마나 강력한지 몰랐어요.

https://www.youtube.com/watch?v=2dQosJaLN18

도움이 되시길 바랍니다.

로컬 브런치에서도 같은 문제가 발생하여 파일을 1개만 되돌리려고 했습니다.나한테 효과가 있었던 건...

(아래 feature/target_branch는 특정 파일에 대해 실행 취소하려는 변경을 포함한 모든 변경을 가지고 있는 곳입니다.)

(origin/feature/target_branch는 변경을 푸시하는 리모트브런치입니다)

(기능 / 스테이징은 1개의 파일에 대한 변경을 제외한 원하는 모든 변경을 푸시하는 임시 스테이징 브런치입니다.)

  1. my origin/feature/target_branch에서 로컬브런치를 만듭니다(기능/스테이지라고 불립니다).

  2. 기능하고 있는 로컬브런치 기능/target_branch기능/스테이지 브런치에 통합.

  3. feature/stage 체크 아웃git reset --soft ORIG_HEAD (이제 feature/stageing'에서 변경된 내용은 모두 스테이징되지만 커밋되지 않습니다.)

  4. 이전에 체크인한 파일을 불필요한 변경으로 스테이징 해제했습니다.

  5. 기능/스테이지의 업스트림브런치를 origin/feature/target_branch로 변경.

  6. 나머지 단계적 변경을 커밋하고 리모트 오리진/기능/타겟_브런치로 업스트림 푸시

그 파일이 더 이상 필요하지 않다면, 당신은 할 수 있습니다.

git rm file
git commit --amend
git push origin branch

아직 git에 변경을 푸시하지 않으면

git reset --soft HEAD~1

모든 변경을 리셋하여 1회의 커밋백으로 되돌립니다.

이것이 마지막 커밋으로 로컬 및 리모트저장소에서 파일을 삭제하려면 다음 절차를 수행합니다.

git rm <file>
 git commit --amend

또는 그 이상:

우선 리셋

git reset --soft HEAD~1

불필요한 파일을 리셋하다

git reset HEAD path/to/unwanted_file

다시 커밋하다

git commit -c ORIG_HEAD  

우리가 할 수 있는 또 다른 방법은 다음과 같습니다.

  1. 파일 삭제
  2. 삭제된 파일을 사용하여 새 커밋하기
  3. 인터랙티브한 기본 재배치 및 두 커밋 모두 스쿼시
  4. 밀다

git 2.23 이후로는 다음 명령을 사용할 수 있습니다.

git restore --staged <file>

GitHub를 사용하고 있고 아직 커밋을 실행하지 않았다면 GitHub Desktop은 이 문제를 쉽게 해결합니다.

  1. [ Repository ]-> [ Undo Last Commit ]를 선택합니다.
  2. 잘못 추가한 파일을 선택 취소합니다.이전 커밋 메시지는 이미 대화상자에 표시됩니다.
  3. Commit(커밋) 버튼을 누릅니다.

이것은 처음에 파일을 브랜치로 푸시한 비트버킷 리포에서 파일을 삭제하는 데 도움이 됩니다.

git checkout origin/develop <path-to-file>
git add <path-to-file>
git commit -m "Message"
git push

현재 파일을 다른 폴더에 복사한 후 다음 방법으로 푸시되지 않은 변경 사항을 모두 제거했습니다.

git reset --hard @{u}

그럼 다시 복사해봐커밋, 푸시

언급URL : https://stackoverflow.com/questions/12481639/remove-file-from-latest-commit

반응형