내가 기억 안 날 때마다 와서 찾아보기 위해 쓰는 포스팅ㅋㅋ
개발 업무를 하다 보면 Git과 Github를 필수로 쓰게 되는데, 두 개의 툴을 쓰면서 가지각색의 상황을 마주하게 된다.
그리고 그 상황들은 거의 간단한 명령여 몇 줄로 해결할 수 있다(진짜다!).
오늘은 '그 명령어 몇 줄'에 대해서 알아보자.
Git에서의 인덱스(index)는 원격을 의미한다.
일단 행동 명령어를 알기 전에 함께 알아두면 좋은 명령어가 있다.
특정 commit으로 돌아갈 때
reset
명령어는 되돌린 버전 이후의 커밋 버전들이 삭제되어 히스토리에 남지 않게 된다.
revert
명령어는 되돌린 버전 이후의 커밋 버전들이 그대로 남아 히스토리에도 남는다.
두 명령어는 3가지 옵션을 가지고 있다.
soft
: 이후의 커밋 내용이 stage 상태로 남아 있다(git add 이후의 상태)mixed
: (Default) 이후의 커밋 내용이 unstage 상태로 남아 있다(git add 전의 상태). 인덱스에서는 리셋된 상태인 것이다.hard
: 모든 작업 상태 내 변경 사항을 버린다.각자의 상황에 맞게 명령어와 옵션을 선택하면 되는데,
보통 협업을 할 때에는 이력을 남기는 게 중요해서 revert
를 많이 사용한다.
**git add
를 취소한다는 뜻**이다.
파일 하나만 언스테이징 한다면 reset 다음에 파일명을 입력하면 된다.
$ git reset(revert) (파일명)
reset
/ revert
명령어로 HEAD를 마지막 commit 이전으로 되돌린다.
$ git reset(revert) --option HEAD^
메세지 수정은 -—amend
옵션으로 처리할 수 있다.
$ git commit --amend -m "수정 커밋 내용"
$ git reflog
reset
/ revert
명령어로 특정 commit 시점으로 되돌린다.$ git reset(revert) --option 커밋해시
$ git push -f origin master
수정하고자 하는 커밋 시점으로 리베이스를 해야 한다.
리베이스에 대한 설명은 다음 글에서 확인할 수 있을 것이다.
🌟리베이스를 한다는 것은 커밋 이력이 변경되는 것을 뜻하기 때문에,
협업을 한다면 반드시 협업자와 사전에 이야기가 되어야 한다.🌟
사전 협의가 되었다는 가정 하에 아래 단계를 진행하면 된다.
리베이스에서 커밋 내역을 확인하려면 i
옵션(interactive)을 사용해야 한다.
-i
옵션을 입력하면 커밋 메세지에 대한 텍스트 에디터가 열린다.
interactive : 사용자가 데이터나 명령을 입력할 수 있도록 함
$ git rebase -i
pick 커밋해시 커밋내용
pick 커밋해시 커밋내용 //수정하고자 하는 코드일 때
.
.
edit
또는 e
로 바꾼 후에 저장한다.pick 커밋해시 커밋내용
**edit** 커밋해시 커밋내용 //수정하고자 하는 코드일 때
**e** 커밋해시 커밋내용 //수정하고자 하는 코드일 때
.
.
$ git commit --amend -m "수정 커밋 내용"
-f
옵션(force)으로 푸시하여 원격 저장소에 반영한다.$ git rebase --continue
$ git push -f origin master
참고로 중간에 리베이스를 하면 안 된다는 이야기를 들었거나, 리베이스를 하고 싶지 않다면 --abort
옵션으로 중단하면 된다.
이 번거로운 과정을 여러 가지 패키지들로 대신할 수도 있다.
주변에서 추천받았던 유틸은 git-amend 였는데 아무리 다운받으려고 해도 안 돼서 나는 포기했다.
오류 지적, 문의 사항 언제나 환영해요 :)