(1) Git 명령어들 - commit 관련

3840 단어 gitgithubcommitcommit

개요


내가 기억 안 날 때마다 와서 찾아보기 위해 쓰는 포스팅ㅋㅋ
개발 업무를 하다 보면 Git과 Github를 필수로 쓰게 되는데, 두 개의 툴을 쓰면서 가지각색의 상황을 마주하게 된다.
그리고 그 상황들은 거의 간단한 명령여 몇 줄로 해결할 수 있다(진짜다!).
오늘은 '그 명령어 몇 줄'에 대해서 알아보자.

Git 명령어


Git에서의 인덱스(index)는 원격을 의미한다.

0. reset과 revert 명령어

일단 행동 명령어를 알기 전에 함께 알아두면 좋은 명령어가 있다.
특정 commit으로 돌아갈 때
reset 명령어는 되돌린 버전 이후의 커밋 버전들이 삭제되어 히스토리에 남지 않게 된다.
revert 명령어는 되돌린 버전 이후의 커밋 버전들이 그대로 남아 히스토리에도 남는다.

두 명령어는 3가지 옵션을 가지고 있다.

  • soft : 이후의 커밋 내용이 stage 상태로 남아 있다(git add 이후의 상태)
  • mixed : (Default) 이후의 커밋 내용이 unstage 상태로 남아 있다(git add 전의 상태). 인덱스에서는 리셋된 상태인 것이다.
  • hard : 모든 작업 상태 내 변경 사항을 버린다.

각자의 상황에 맞게 명령어와 옵션을 선택하면 되는데,
보통 협업을 할 때에는 이력을 남기는 게 중요해서 revert를 많이 사용한다.

1. staging 취소하기

**git add를 취소한다는 뜻**이다.
파일 하나만 언스테이징 한다면 reset 다음에 파일명을 입력하면 된다.

$ git reset(revert) (파일명)

2. 마지막 commit 취소하기

reset / revert 명령어로 HEAD를 마지막 commit 이전으로 되돌린다.

$ git reset(revert) --option HEAD^

3. 마지막 commit 메세지 수정하기

메세지 수정은 -—amend 옵션으로 처리할 수 있다.

$ git commit --amend -m "수정 커밋 내용"

4. 특정 시점으로 commit 되돌리기

  1. commit 이력을 확인한다.
$ git reflog
  1. reset / revert 명령어로 특정 commit 시점으로 되돌린다.
$ git reset(revert) --option 커밋해시
  1. 원격 저장소에 강제로 push 한다.
$ git push -f origin master

5. 특정 시점의 commit 메세지 수정하기

수정하고자 하는 커밋 시점으로 리베이스를 해야 한다.
리베이스에 대한 설명은 다음 글에서 확인할 수 있을 것이다.

🌟리베이스를 한다는 것은 커밋 이력이 변경되는 것을 뜻하기 때문에,
협업을 한다면 반드시 협업자와 사전에 이야기가 되어야 한다.
🌟

사전 협의가 되었다는 가정 하에 아래 단계를 진행하면 된다.
리베이스에서 커밋 내역을 확인하려면 i옵션(interactive)을 사용해야 한다.
-i 옵션을 입력하면 커밋 메세지에 대한 텍스트 에디터가 열린다.

interactive : 사용자가 데이터나 명령을 입력할 수 있도록 함

  1. 해당 커밋으로 리베이스 한다.
$ git rebase -i
  1. 이렇게 나올 것이다.
pick 커밋해시 커밋내용
pick 커밋해시 커밋내용    //수정하고자 하는 코드일 때
.
.
  1. 수정하고자 하는 커밋 해시 앞의 단어를 edit 또는 e로 바꾼 후에 저장한다.
pick 커밋해시 커밋내용
**edit** 커밋해시 커밋내용    //수정하고자 하는 코드일 때
**e** 커밋해시 커밋내용    //수정하고자 하는 코드일 때
.
.
  1. 커밋 메세지를 새로 작성하여 커밋한다.
$ git commit --amend -m "수정 커밋 내용"
  1. 리베이스를 진행하고 -f 옵션(force)으로 푸시하여 원격 저장소에 반영한다.
$ git rebase --continue
$ git push -f origin master

참고로 중간에 리베이스를 하면 안 된다는 이야기를 들었거나, 리베이스를 하고 싶지 않다면 --abort 옵션으로 중단하면 된다.
이 번거로운 과정을 여러 가지 패키지들로 대신할 수도 있다.

주변에서 추천받았던 유틸은 git-amend 였는데 아무리 다운받으려고 해도 안 돼서 나는 포기했다.


오류 지적, 문의 사항 언제나 환영해요 :)

좋은 웹페이지 즐겨찾기