0. Introduction
해당 내용은 제대로 파는 Git & GitHub - by 얄코 을 통해서 공부한 내용입니다.
이번 단원에서는
git stash,git commit --amend그리고,git rebase -i명령어를 학습해본다.마지막으로 과거의 커밋을 수정, 삭제, 병합, 분할해보는 명령어를 학습해본다.
7-3. git stash
커밋하기 애매한 변화를 치워두는 명령어
- Stash 사용법 정리
| 명령어 | 설명 | 비고 |
|---|---|---|
| git stash | 현 작업들 치워두기 | 끝에 save 생략 |
| git stash apply | 치워둔 마지막 항목(번호 없을 시) 적용 | 끝에 번호로 항목 지정 가능 |
| git stash drop | 치워둔 마지막 항목(번호 없을 시) 삭제 | 끝에 번호로 항목 지정 가능 |
| git stash pop | 치워둔 마지막 항목(번호 없을 시) 적용 및 삭제 | apply + drop |
| git stash branch(브랜치명) | 새 branch를 생성하여 pop | 충돌사항이 있는 상황 등에 유용 |
| git stash clear | 치워둔 모든 항목들 비우기 |
변경사항을 먼저 만들어보자.
- Tigers의 members에
Stash를 추가한다. tomcats.yaml을 추가한 후,git add를 실행- 여기서
git add를 한 이유는git stash라는 명령어를 실습하기 위해서는 먼저tracked상태여야 한다.
- Tigers의 members에
git stash실행:git add했던 변화들이 사라진다.- 사라진 변화들은 sourcetree에서
스태시란에서 확인할 수 있다.
- 사라진 변화들은 sourcetree에서
git stash pop을 입력하여 원하는 시점, 브랜치에 다시 적용한다.- 다른 branch를 만들고 전환 후, 이 명령어로 적용해보자.
git add -p처럼 원하는 것만 stash 할 수 있다.- Leopards의 members에
Stash2를 추가한다. - Jaguars의 members에
Stash3를 추가한다. git stash -p로Stash2만 선택하여 스태시한다.
- Leopards의 members에
메시지와 함께 스태시를 할 수도 있다.
git stash -m 'Add Stash3'1 2$ git stash -m 'Add Stash3' Saved working directory and index state On remote-branch: Add Stash3
스태시 목록 보기
-git stash list1 2 3$ git stash list stash@{0}: On remote-branch: Add Stash3 stash@{1}: WIP on remote-branch: 1b2bbcb Edit Leopards and Tigers스태시된 항목 삭제:
git stash drop1 2 3 4 5$ git stash drop stash@{0} Dropped stash@{0} $ git stash list stash@{0}: WIP on remote-branch: 1b2bbcb Edit Leopards and Tigers
7-4. git commit –amend
Commit message 변경하기
커밋 메시지를 변경하거나, 커밋에 변화를 추가 또는 커밋 메시지를 한 줄로 변경할 수도 있다.
커밋 메시지 변경
- 파일에 변화를 준 후, 커밋 메세지를
와웅으로 입력해보자. git commit --amend를 입력하여 편집창을 띄운다.- Commit message:
Add a member to Panthers를 입력 후,:wq를 입력하여 저장 종료한다. git log로 확인해보자.
- 파일에 변화를 준 후, 커밋 메세지를
커밋에 변화 추가: 지난 커밋에 줘야할 변화를 깜빡했을 경우
- 파일들에 변화를 준 후, staging area에 올린다.
git commit --amend로 마지막 커밋에 포함시킨다.
위에 처럼
git commit --amend를 실행한 후, 편집기가 뜨면 그 때 메세지를 수정하는 것 외에도 단 한 줄로도 수정할 수 있다.git commit --amend -m '(커밋 메세지)'
또한 바로 staging area에 올리면서 한 번에 커밋메세지를 수정하는 방법도 있다.
git commit -a --amend -m '(커밋 메세지)'
7-5. git rebase -i
i란 interactive를 의미하며, 과거의 커밋 내역들을 다양한 방법으로 수정 가능하다.
git rebase -i를 입력했을 때, 사용되는 명령어들
| 명령어 | 설명 |
|---|---|
| p, pick | 커밋 그대로 두기 |
| r, reword | 커밋 메세지 수정 |
| e, edit | 수정을 위해 정지 |
| d, drop | 커밋 삭제 |
| s, squash | 이전 커밋에 합치기 |
git log로 커밋 내역들을 확인한다.git rebase -i <commit 해시 번호>를 입력하며 다음과 같이 뜬다.
| |
❗ git rebase -i를 입력했지만, Vim 화면은 뜨지 않고, ‘There is no tracking information for the current branch..‘가 뜰 때는 최신 커밋을 입력한 것이다. 해당 명령어는 입력한 커밋 해쉬 번호 이후부터를 보여주기 때문에, 최신 커밋을 보여줬으므로 당연히 아무것도 뜨지 않는다.
Vim에서 수정해보기
다음 수정사항들을 진행해보자.
hash number가
1c799ad인 커밋 메세지를버그 수정으로 변경한다.r명령어를 사용한다.
hash number가
ff00ad8인 커밋은 삭제d명령어 사용
hash number가
b9d4eb7을f35344a에 합치기- 첫 항목 뒤로
s명령어 사용하기 - 메시지 수정 후 저장
- 커밋 메세지는 하나만 있으면 되므로, 두 개중 하나의 커밋 메세지를 삭제한다.
- 첫 항목 뒤로
위 명령어들을 입력하면 다음과 같다.
1 2 3 4 5 6 7 8$ git rebase -i r 1c799ad d ff00ad8 pick f35344a s b9d4eb7 pick 8605c74 pick 59b42f3
하나의 커밋을 두 커밋으로 나누기
- 한 커밋 안에 두 작업이 있으므로, 2개의 커밋으로 나누는 작업을 진행해보자.
git rebase -i <나눌려고 하는 commit의 이전 commit 해시 번호>입력- pick에서
e로 수정하고:wq
- pick에서
git reset HEAD~- 변화들을 따로 스테이지 및 커밋
git rebase --continue