Git에서 푸시되지 않은 커밋 제거

Azhar Bashir Khan 2022년5월31일
Git에서 푸시되지 않은 커밋 제거

이 튜토리얼은 Git에서 푸시되지 않은 커밋을 제거하는 방법을 알려줍니다.

Git은 협업 개발 환경에서 프로젝트 디렉토리의 파일에 대한 변경 사항을 추적하는 데 사용됩니다. Git은 커밋을 사용하여 로컬 및 원격 Git 리포지토리 변경 사항을 모두 추적합니다.

때때로 로컬 Git 리포지토리에서 푸시되지 않은 커밋을 제거하고 싶을 수 있습니다.

git reset 명령을 사용하여 푸시되지 않은 커밋을 제거합니다. 우리는 이것을 예를 들어 설명할 것입니다.

git reset 명령을 사용하여 Git에서 푸시되지 않은 커밋 제거

프로젝트 디렉토리에 변경 사항을 커밋할 때마다 git addgit commit 명령을 사용하여 변경 사항을 커밋할 수 있습니다.

git commit 명령을 사용하면 로컬 Git 저장소에 커밋이 생성됩니다. 그런 다음 git push 명령을 사용하여 로컬 Git 리포지토리의 커밋을 원격 Git 리포지토리로 푸시할 수 있습니다.

때로는 커밋을 원격 리포지토리에 푸시하고 싶지 않고 로컬 리포지토리에 커밋했다는 사실을 깨달을 수 있습니다. 이러한 경우 git reset 명령을 사용하여 로컬 Git 리포지토리에서 마지막 커밋을 커밋 해제하거나 제거할 수 있습니다.

git reset은 Git 저장소 상태에 대한 로컬 변경 사항을 취소하는 데 사용되는 명령입니다.

작업 디렉토리에 변경 사항이 있다고 가정합니다. git status 명령으로 변경 상태를 볼 수 있습니다.

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)
        modified:   mynotes.txt

mynotes.txt 파일이 수정되어 커밋할 수 있음을 알 수 있습니다.

수정 사항을 커밋하려면 먼저 git add 명령을 사용하여 로컬 Git 리포지토리의 스테이징 인덱스에 변경 사항을 추가해야 합니다. 다음과 같이 git add 명령을 실행해야 합니다.

$ git add .
$ git status
On branch main
Your branch is up to date with 'origin/main'.

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

따라서 git status 명령을 사용하면 변경 사항이 이제 준비되었음을 알 수 있습니다.

로컬 Git 리포지토리에 변경 사항을 커밋할 수 있습니다. 단계적 변경 사항에 대한 커밋을 생성하려면 git commit 명령을 사용해야 합니다.

다음과 같이 git commit 명령을 실행합니다.

$ git commit -m "updated mynotes"
[main e1b08a5] updated mynotes
 1 file changed, 1 insertion(+)

이제 git status 명령을 다시 실행하여 상태를 확인합니다.

$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

이제 로컬 저장소의 로컬 분기가 원격 origin/main Git 저장소 분기보다 한 커밋 앞서 있음을 알 수 있습니다.

git push 명령을 사용하여 커밋을 원격 Git 저장소로 푸시할 수 있습니다. 그러나 그렇게 하는 대신 다음과 같이 git reset 명령을 사용하여 푸시되지 않은 커밋을 제거합니다.

$ git reset --soft HEAD~1

--soft 옵션이 있는 git reset 명령은 로컬 Git 저장소에서 푸시되지 않은 커밋을 제거하지만 로컬 변경 사항은 유지합니다. HEAD~1git reset 명령을 지정하여 마지막 커밋 하나만 제거합니다.

이제 git status를 실행하여 다음과 같이 저장소의 상태를 확인합니다.

$ git status
On branch main
Your branch is up to date with 'origin/main'.

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

따라서 푸시되지 않은 커밋이 더 이상 존재하지 않음을 알 수 있습니다. 그러나 수정 사항은 여전히 ​​단계적입니다.

git reset 명령과 함께 --soft 명령 옵션 대신 --hard 옵션을 사용하면 HEAD~1에 지정된 대로 최근 커밋이 삭제되고 로컬 변경이 완료됩니다.

--hard 옵션을 사용하여 git reset 명령을 실행할 수 있습니다.

$ git reset --hard HEAD~1

이것은 또한 추적된 수정 사항과 함께 추적되지 않은 파일 또는 디렉토리를 삭제합니다. 따라서 주의해서 사용하십시오. 그렇지 않으면 수행한 모든 작업을 잃을 수 있습니다.

따라서 로컬 Git 리포지토리에서 푸시되지 않은 커밋을 제거하는 방법을 배웠습니다.

자세한 내용은 다음을 방문하십시오.

  1. git-reset
  2. git reset

관련 문장 - Git Reset