Git을 사용한다면 add, commit, push, status는 당연히 사용해 보았을 겁니다. 더불어 branch, checkout 및 remote와 같은 기본적인 명령어까지는 한번쯤은 사용하게 되는 명령어입니다. 그렇지만 git에는 다른 명령어가 많습니다. 오늘은 개발하면서 한 번쯤은 편리하게 써먹게 될 git 명령어 몇 가지를 소개하겠습니다.

commit --amend

이미 완료된 커밋을 수정할 때 사용합니다. 커밋 메세지를 수정하거나 커밋에 수정사항을 추가하고 싶을 때 사용합니다. 예를 들어 커밋 메세지에 오타가 있거나, 실수로 같이 커밋해야될 파일을 add하지 못했을 경우에 사용하면 유용합니다. 다만 이미 원격 레포지토리(giHub, giLab)에 푸시한 내역을 수정하려면 강제로 푸시하여야 되기 때문에 원격 레포지토리에 푸시하기 전에 사항을 확인 한 뒤에 잘못된 부분이 있을 때 사용하는 것이 좋습니다.

// 이전의 커밋에 추가할 변경사항
git add addtionalChage.js

git commit --amend
git commit --amend -m "수정된 커밋 메세지" // 커밋 메세지를 수정
git commit --amend --no-edit // 커밋 메세지 변경없이 추가

위처럼 단순히 --amend 키워드만 사용할 경우 Git 시스템에서 기본 편집기로 설정된 편집기(일반적으로 Vim)을 통해 커밋 메세지를 수정할 수 있습니다. 자유롭게 커밋 메세지를 수정한 뒤, esc를 누루고 :wq를 입력하여 수정을 저장할 수 있습니다.

stash

현재 브렌치에서 수정되었지만 아직 커밋되지 않은 파일들의 변경 사항을 임시 저장합니다. 임시 저장된 변경 사항(워킹 디렉토리와 스테이징 영역)은 현재 브렌치에서 사라지며 다른 곳으로 옮길 수 있는 상태가 됩니다.

git stash // 변경 사항을 임시 저장 공간으로 이동

git stash apply // 현재 위치에 변경사항 적용(스태시 목록에서 해당 항목을 제거하지 않음)

git stash pop // 저장된 변경 사항을 다시 적용하고, 스태시 목록에서 해당 항목을 제거

git stash list // 저장된 스태시 목록을 확인, 각 항목은 stash@{n} 형식으로 표시

git stash apply stash@{n} // 특정 스태시 항목(stash@{n})을 현재 워킹 디렉토리에 적용

git stash drop stash@{n} // 특정 스태시 항목(stash@{n})을 삭제

git stash clear // 모든 스태시 항목을 삭제

저는 대부분은 잘못된 브렌치에서 수정을 하고 있었을 때 올바른 위치로 이동하는 용도로 사용하였습니다. 그래서 git stash apply보단 git stash pop을 사용하는 경우가 많았습니다. stash는 현재 변경 사항을 커밋해야되지는 않지만 다른 브렌치로 이동해야 하는 경우에도 유용합니다. 저장해 두었다가 다시 현재의 브렌치로 돌아올 때 statsh를 이용해 현재 작업하던 변경 사항을 가져 올 수 있습니다. 이 경우 stash한 내역을 잃지 않기 위해 임시로 다른 브렌치를 만들어 해당 브렌치에 작업 내역을 커밋해 두는 것이 좋습니다. statsh는 작업 내역을 영구 저장하지는 않기 때문입니다.

cherry-pick

git cherry-pick 명령어는 다른 브랜치에서 특정 커밋을 현재 브랜치로 가져오는 작업을 수행하는 Git 명령어입니다. 마치 체리알에서 원하는 체리를 골라내는 것처럼, 원하는 커밋만 선택적으로 가져올 수 있다는 의미입니다. git cherry pick은 유용한 도구지만 일반적으로 사용하지 않는 것이 권장됩니다. 중복 커밋을 유발할 수 있으며, cherry pick이 작동하는 많은 시나리오에서 대신에 merge를 사용하는 것이 좋습니다. 하지만 일부 상황에서는 유용하게 사용할 수 있습니다.

 

예를 들어 개발자가 아직 병합되지 않은 다른 개발자의 특정 기능을 사용할 필요가 있을 때, 해당 기능이 구현된 커밋을 가져와 적용할 수 있습니다. 또는 HotFix가 필요한 버그를 수정한 뒤 버그가 수정된 커밋을 main 혹은 master 브렌치에 빠르게 적용할 수 있습니다.

git cherry-pick <commit_hash> // 특정 커밋 cherry-pick(복사), commit_hash는 git log 명령어를 통해 확인 가능

git checkout <branch> // 커밋을 옮길 브렌치로 이동

git cherry-pick <commit_hash> // git cherry-pick(붙여넣기) 실행

참고 자료

Git, Git 도구 - Stashing과 Cleaning
ATLASSIAN, Git 스태시
ATLASSIAN, Git Cherry Pick

+ Recent posts