HEAD
: symbolic name for the currently checked out commit -- the commit we're working on top ofgit rebase to from
: to
로 from
을 rebase
즉, 새로운 to
브랜치에 from
의 커밋들을 새로운 커밋처럼 추가한다
git cherry-pick commitHash
: 나열한 커밋들을 현재 헤드에 추가
git branch -f branchToMove to
: to
로 branchToMove
이동git checkout HEAD~#
: 헤드를 현재 위치에서 #
만큼 이동git checkout commitHash
: 해당 커밋으로 헤드 이동git reset HEAD~#
: 현재 브랜치의 커밋에서 #만큼 뒤로 이동git pull
: git fetch
+ git merge
fetch
하면 일단 origin/main
브랜치가 리모트의 origin
브랜치의 상태를 불러오는 것main
(이하 로컬 브랜치) 과 origin/main
(이하 리모트 브랜치) 브랜치가 연동되는 것은 로컬 브랜치가 리모트 브랜치는 remote tracking
하고 있기 때문(이 관계는 깃이 자동으로 설정해줌). 이 덕분에 리모트의 어디에 푸시하면 되는지 알 수 있는 것remote-tracking repository
를 가리키고 있지 않으면 어디에 푸시해야되는 지 몰라서 푸시가 안됨!git pull --rebase
: fetch
+ rebase
rebase
를 사용하면 커밋 트리가 깔끔하다는 장점이 있지만 커밋 히스토리가 왜곡될 수 있으므로(commit2를 먼저 끝냈는데 commit3에 리베이스되면 나중에 끝낸 것처럼 보임) rebase
냐 merge
냐는 취향차이다. git push origin main
의 의미: 로컬 레포의 main
브랜치에 가서 모든 커밋을 가져온 다음 리모트 레포의 main
브랜치에 가서 없는 커밋들을 넣어준다.git push origin localSource : remoteDestination
과 같이 지정하면 위와 달리 로컬 레포와 리모트 레포에서의 브랜치 명이 달라도 푸쉬할 수 있다
git push origin :remoteBranch
를 하면 리모트 레포의 브랜치를 삭제할 수 있다
rebase
와 squash + merge
가 깃트리 상에서는 결론적으로 유사해보여서 무슨 차이일까 고민했는데 히스토리를 보니까 rebase
는 정말로 머지의 흔적조차 안남는다면 후자는 머지의 흔적이 남기는 하는 것 같다 깃트리가 하나로 보이지만 아마 실제로는 아니거나 암튼..
merge
, squash
가 squash + merge
그리고 4-1, 4-2 가 rebase
한 것#issueNumber
를 포함해 주면 됨git commit -m "[feat] commitDescription #issueNumber"