-
수정과 관련된 git 명령어 💡Git 2020. 12. 5. 20:06반응형
최근에 git 커밋 메시지를 정성들여 써야하는 일이 생기면서
커밋 메시지를 수정해야하는 일이 잦아졌다.
기존에 알고있던 git 명령어라고는 config, clone, add, commit, push, checkout 정도밖에 없던 나에게
커밋 메시지를 수정하는 것은 상당한 도전(..)이었다.
기왕에 조사해 본 김에,
다음에 까먹었을 때는 인터넷을 이리저리 뒤지지 말고
그냥 내 블로그에서 바로 찾아볼 수 있도록 하기 위해 포스팅을 좀 해놔야겠다.
그리고 블로그에 정리해놓으면 뭔가 기억에도 더 잘 남는 듯한
착각인지 실제인지 모를 효과도 있다.
1. 기본 에디터 바꾸기
우선, 나는 윈도우를 사용하기 때문에 윈도우를 기준으로 포스팅을 하겠다.
윈도우에서 커밋 메시지를 수정하려면 기본 에디터를 바꿔줘야 한다.
Git을 설치할 때 아무것도 모르고 설치한 나같은 사람들은
기본 에디터를 너무나 자연스럽게 Vim으로 설정하고 슈루룩 넘어갔을텐데
이것을 윈도우 기본 메모장으로 바꿔보도록 하자.
(메모장 말고 딴걸로 바꾸는 것도 당연히 가능하다)
git config --global core.editor notepad.exe
요렇게 cmd창에다가 입력해주면 된다.
만약 VS Code로 설정하고싶다면
git config --global core.editor "code --wait"
요렇게 해주면 된다고 한다.
뒤에 '--wait'이 왜 붙는건지는 나도 잘 모르겠다.
2. 가장 최근 커밋 메시지 수정하기
git commit --amend
이렇게 입력하고나면 텍스트 에디터가 열린다.
그러면 최상단에 나타난 커밋 메시지를 원하는대로 수정하고
ctrl + s로 저장한 후 텍스트 에디터를 종료해주면 된다.
3. 특정 시점의 커밋 메시지 수정하기
우선, 수정을 원하는 지점까지 HEAD~n으로 지정하고 rebase 명령어를 호출해준다.
git rebase -i HEAD~5
그러면 텍스트 에디터가 열리면서 상단에 아래와 같은 글자들이 나타나는데,
이 때 원하는 시점에 해당하는 부분의 'pick'을 'edit'으로 바꿔준 후 저장하고 텍스트 에디터를 닫는다.
그러면 해당 커밋으로 HEAD가 이동하게 된다.
pick 5e5e5e5 커밋메시지1 pick 85ef132 커밋메시지2 pick 3fe2a45 커밋메시지3 pick bd088bb 커밋메시지4 pick ad4473f 커밋메시지5
그리고 amend 명령어를 입력해주면 해당 시점의 커밋 메시지를 수정할 수 있다.
git commit --amend
수정 후 저장하고 텍스트 에디터를 닫은 뒤, 아래 명령어를 입력해준다.
그러면 그 다음 수정을 원하는 커밋으로 HEAD가 이동된다.
git rebase --continue
수정을 원하는 커밋이 모두 수정 완료되면 다음과 같은 메시지가 뜬다.
Successfully rebased and updated refs/heads/${branch 이름}.
그러면 정상적으로 수정이 완료된 것.
4. 특정 커밋 시점으로 되돌리기(로컬)
git reset --hard ${commit 아이디}
커밋 아이디라고 칭하는 것이 맞는지는 잘 모르겠지만.
7자로 이루어진, 각각의 커밋을 나타내는 문자열을 뒤에 적어주면 된다.
그러면 해당 시점 이후로 되돌아가게 된다.
참고로 뒤에 붙는 옵션은 3가지 정도가 존재한다.
1. --hard: reset 하기 전까지 했던 staging area, working directory의 작업들을 싹 다 리셋한다.
2. --mixed(default): staging area만 리셋한다. reset 하기 전까지 했던 working directory의 작업물들은 그대로 남겨둔다.
현재 작업중인 내용을 지우기는 싫고, 이전 버전으로 돌아가서 add를 할지 말지 결정하는 시점으로 돌아간다는 것.
3. --soft: reset 하기 전까지 했던 staging area, working directory의 작업들은 모두 남겨둔다.
현재 작업물을 지우지 않고, 이전 버전으로 돌아가서 add를 할지 말지 결정하는 시점으로 돌아간다는 것.
로컬에서 커밋을 되돌린 후, 그것을 원격 저장소에까지 적용하고 싶다면
강제로 푸시를 해주면 된다.
git push -f origin master(혹은 branch name)
5. 전체 파일 add 취소하기
git reset
6. commit 취소하기
git reset HEAD^ git reset HEAD^^
꺾쇠 개수만큼 가장 최신 커밋을 삭제할 수 있다고 한다.
아직은 써본 적 없음.
참고
마지막 참고 출처는 해당 글에 달린 '폭스킴'님의 댓글.
반응형'Git' 카테고리의 다른 글
Git cherry-pick (2) 2021.03.31 Git merge (0) 2021.03.26 git stash 명령어 (0) 2021.03.15 .gitignore가 올바르게 작동하지 않을 때 😤 (0) 2021.02.07 Git 커밋 메시지 컨벤션 (0) 2020.12.30