minyoung

원격저장소(github)에 푸시된 커밋 취소하기 revert? reset? 본문

Git&Github

원격저장소(github)에 푸시된 커밋 취소하기 revert? reset?

stylish-code 2024. 1. 22. 16:41

팀 프로젝트를 진행했다.

팀장이 풀 리퀘스트 코드를 보고 수정사항을 말해줬고, 나는 원격에 푸시한 커밋을 취소했어야 했다.

롤백(변경 사항을 이전 상태로 되돌리는 용어)을 어떻게 하는지 검색했고, git reset과 git revert에 대한 명령어를 찾았다.

개인 프로젝트가 아닌 "협업" 이었으므로 git revert를 활용했다. git reset은 사용하지 않았다.

개인 프로젝트를 할 때는 git reset이 필요할 경우가 있을 것이기 때문에 함께 언급한다.

협업할 때 rollback이 필요한 경우는 수없이 있을 것이므로 잊지 않고 기억하기 위해 기록한다.

 

 

git reset
git reset

커밋한 내용을 다시 되돌릴 수 있는 명령어이다.
개인 프로젝트를 하면서 잘못된 코드를 커밋한 적이 있을 것이고,
잘못된 코드를 커밋했는데 푸시까지 한 적이 있을 것이다.
이 현상들을 해결하기 위해서 git reset을 활용할 수 있다.

git reset 명령어는 되돌아가고 싶은 커밋과 현재 사이의 커밋을 모두 삭제한다.

git reset은 특정 커밋으로 HEAD와 브랜치를 이동시키는 Git 명령어이다.
주로 개인 브랜치에서 사용되며, 커밋들을 제거하거나 이동하는 데 사용된ㄷ.

아래는 git reset에 대한 설명과 예시이다.

git reset 명령어 설명:
➡️옵션:
    👉--soft: 변경 사항은 유지하면서 HEAD만 이동한다.
    👉--mixed (기본 옵션): HEAD를 이동하고, 변경 사항을 스테이징 영역에 유지하지 않는다.
    👉--hard: HEAD를 이동하고, 변경 사항을 모두 제거한다. 작업 디렉토리와 스테이징 영역을 이전 커밋으로 복원한다.

git reset 예시:
1. 커밋 이력 확인:
git log --oneline​
먼저 현재 브랜치의 커밋 이력을 확인한다.

2. 가장 최근의 커밋 제거 (HEAD만 이동):
git reset --soft HEAD^​

--soft 옵션은 변경 사항을 유지하면서 HEAD를 이전 커밋으로 이동시킨다.

3. 스테이징 영역까지 초기화 (HEAD 이동, 변경 사항 스테이징 영역으로):
git reset --mixed HEAD^​

--mixed 옵션은 HEAD를 이동시키면서 변경 사항을 스테이징 영역에 유지하지 않는다.

4. 작업 디렉토리까지 초기화 (HEAD 이동, 변경 사항 스테이징 영역과 작업 디렉토리 초기화):
git reset --hard HEAD^​

--hard 옵션은 HEAD를 이동시키면서 변경 사항을 스테이징 영역과 작업 디렉토리에서 모두 제거한다.

5. 특정 커밋으로 이동 (변경 사항 모두 제거):
git reset --hard 커밋해시​

--hard 옵션을 사용하여 HEAD를 특정 커밋으로 이동하면서 변경 사항을 모두 제거한다.

주의사항:

➡️ git reset은 커밋 이력을 변경하므로 조심해서 사용해야 한다.
     이미 푸시한 커밋에 대해서는 사용을 지양해야 하며, 대신
➡️ git revert를 고려할 수 있다.

 

HEAD
1. HEAD:
➡️HEAD는 현재 작업 중인 브랜치의 가장 최신 커밋을 가리키는 포인터이다.
➡️HEAD는 현재 체크아웃된 커밋(브랜치의 가장 최신 커밋)을 가리키며, 작업 디렉토리의 파일들은 이 커밋의 상태를 반영한다.

2. 브랜치:
➡️브랜치는 커밋의 가리키는 레이블(label)로, 새로운 커밋이 발생할 때마다 이동한다.
➡️HEAD가 가리키는 커밋은 현재 체크아웃된 브랜치의 가장 최신 커밋이다.

git reset 명령어의 사용에 따라 HEAD와 브랜치의 위치가 변경된다.
git reset HEAD^: HEAD와 현재 브랜치를 가리키는 레이블을 가장 최근의 커밋의 부모로 이동시킨다. 이 경우 변경 사항은 유지되지만 스테이징 영역으로 이동한다.
git reset --hard HEAD^
: HEAD와 현재 브랜치를 가리키는 레이블을 가장 최근의 커밋의 부모로 이동시킨다. 변경 사항은 스테이징 영역과 작업 디렉토리에서 모두 제거된다.

 

다음 장에서는 git revert에 대해 기록한다.

'Git&Github' 카테고리의 다른 글

git revert  (0) 2024.01.22
💡💡💡There isn't anything to compare (master에 push 한 걸 main으로)  (0) 2024.01.13