merge는 branch를 병합할 때 가장 많이 쓰인다. merge는 커밋시간의 흐름대로 커밋을 나열한다. 그래서 직관적으로 시간의 흐름따라 어떤내용이 수정되었는지 확인 할 수 있다. 하지만, 브랜치 갯수가 많아지고 커밋을 돌려놔야할 때 다른사람이 작업한 커밋까지 돌려놔야하는 경우가 생긴다.
git rebase -i 베이스로 받을 branch
merge는 커밋을 돌려놔야할 때 다른사람의 커밋까지 돌려놔야한다. 하지만 rebase를 사용하면 현재 master를 base로하고 master 커밋뒤에 브랜치 커밋을 이어 붙인다. 그러면 커밋을 돌릴때 다른 브랜치의 커밋을 작업해야하는 경우도 보안할 수 있다.
merge는 브랜치가 많아지면 커밋이 복잡해지고 불필요한 커밋이 남기 쉽다.
squash는 커밋을 다른 커밋에 밀어 넣는다는 뜻이다. 커밋이 많아지면 가독성도 떨어지고 지저분해 보일 수 있다. squash를 하게되면 커밋의 수정내용을 하나로 합쳐 커밋이 깔끔해보인다.
아직 마무리하지 않은 작업을 스택에 잠시 저장할 수 있도록 하는 명령어이다. 이를 통해 아직 완료하지 않은 일을 commit하지 않고 나중에 다시 꺼내와 마무리할 수 있다.
git cherry-pick은 다른 브랜치에 있는 커밋내용은 선택해 내 브랜치에 적용시키는 명령어다.
현재 x브랜치에서 76ae30ef
커밋내용을 갖고 오려한다.
git cherry-pick 76ae30ef
를 작성하면 현재 작업중인 브랜치에 커밋 내용이 들어오게된다.
git cherry-pick 76ae30ef..a0ee451c
는 76ae30ef부터a0ee451c 까지 작업내용을 적용한다는 뜻이다.
git reset <옵션> <돌아가고싶은 커밋>
gir reset은 해당 커밋(과거)로 돌아갈 때 사용한다. 옵션에는 hard와 soft가 있는데 hard는 과거로 돌아가면서 해당 커밋이후 기록을 지우는것을 의미하며 soft는 커밋이후 기록을 남기며 인덱스도 남아 있다.(되돌릴 수 있다)
아무것도 적지않으면 mixed로 사용되는데 mixed는 인덱스는 지워지지만 정보는 남아있는 상태다(역시 되돌릴수있다)
git reset --hard a3bbb3c // a3bbb3c로 돌아간다
git reset HEAD~2 //해당커밋으로부터 2개 전 커밋으로 돌아간다
git revert <되돌릴 커밋>
revert는 해당커밋을 지울때 사용한다. 대신 지운내용에대한 커밋도 추가되어 과거로 돌아가는 방법과는 다른방법으로 작업을 되돌린다.
이미 push가 된 상태라면 reset보단 revert를 사용한다. 이미 올라간 작업에대해 과거로 돌릴 수 없기에 커밋을 추가하여 해당 커밋내용을 지우는게 맞다.
커밋의 이름을 바꿀 때 사용한다.
commit 326fc9f70d022afdd31b0072dbbae003783d77ed
Author: yourname <yourname@yourmail.com>
Date: Mon Jul 16 23:17:56 2012 +0900
add의 설명을 추가
commit 48eec1ddf73a7fb508ef664efd6b3d873631742f
Author: yourname <yourname@yourmail.com>
Date: Mon Jul 16 23:16:14 2012 +0900
first commit