예) status를 st라고 줄이고 싶을 때
git config --global alias.st status
예) css 파일만 추가하고 싶을 때
git add *.css
tracking 하고 싶지 않은 파일들, 깃과 깃허브에 올리고 싶지 않은 파일들은 .gitignore
파일에 추가하면 된다.
아무런 옵션이 없으면 working directory에 있는 것만 비교해서 볼 수 있다.
git diff
staging area에 있는 것을 보고 싶다면 --staged 옵션 추가
git diff --staged
working directory와 staging area의 모든 변경사항을 커밋할 때, 한꺼번에 add, commit을 할 수 있도록 옵션을 지정할 수 있다.
git commit -am "커밋 메시지"
git mv 원래파일이름 변경할파일이름
git log --oneline --graph --all
format을 원하는대로 조합해서 사용할 수 있는데 git config --global alias~
를 사용하면 된다.
앨리쌤이 알려주신 것은 git hist
로 등록해두었다.
최근 n개 커밋만 보기, author="ㅁㅁㅁ"인 커밋만 보기, 특정 날짜 이전의 커밋만 보기, 제목에 특정 단어가 포함된 커밋만 보기, 소스코드에서 특정 문자열을 변경사항으로 가지는 커밋 보기 (-S 옵션)
커밋에 마치 북마크처럼 tag를 달아둘 수 있다. 현업에서는 버전 정보를 달아둔다.
git tag (태그 이름) (커밋의 해시코드)
git tag v.1.0.0 0ad2dbb
release note 작성은 아래처럼 한다.
git tag (릴리즈 노트를 넣을 태그 이름) (커밋의 해쉬코드) -am "(노트 내용)"
git tag v1.0.1 328708d -am "Release note..."
원하는 특정 태그에서 브랜치를 생성하는 것도 가능하다.
git checkout -b (새 브랜치 이름) (브랜치를 만들 태그 이름)
git checkout -b testing v1.0.1
git branch --merged
git branch --no-merged
git branch --move (원래 이름) (변경할 이름)
git branch --move fix fix-welcome
origin 저장소에 이름 변경 반영
git push --set-upstream origin (변경한 이름)
git push --set-upstream origin fix-welcome
예) master 브랜치에서 test 브랜치를 만들고 커밋한 상황
git log master..test
내가 지정해놓은 hist로도 볼 수 있다.
git hist master..test
코드들을 보고 싶다면 diff를 이용
git diff master..test
fast forward merge에서는 기본적으로 머지 됐다는 커밋이 남지 않는다. 만약 머지 됐다는 커밋을 남기고 싶다면 --no-ff 옵션을 달아주면 된다.
git merge --no-ff (가져올 브랜치)
이 때 vsc로 파일이 하나 열리는데 기본적으로 들어가는 커밋 메시지가 적혀있다. 수정해도 되고 안 해도 된다. 열린 파일을 닫아주면 머지가 완료되고, 머지됐다는 커밋 메시지도 남는다.
엘리쌤은 이게 오히려 지저분해보여서 머지 메시지 없이 그냥 하신다고 하셨고, 모든 history를 남기는 게 좋다면 저렇게 하면 된다고 하심. 선호도 차이!
master 브랜치에서 생성한 새 브랜치(a라고 하자.)에 커밋이 몇 개 있고, master 브랜치에서도 a 브랜치를 만든 시점보다 커밋이 더 진행된 경우 fast forward merge가 불가능하다. 이 때는 merge commit을 만들어서 두 브랜치의 변경사항을 모두 합쳐야 한다.
master 브랜치에서 git merge a
라고 입력하면 바로 머지가 되지 않고 vsc에서 merge commit 파일이 열린다. 그 파일을 다시 닫아주면 three-way merge가 완료된다.
(이렇게 파일이 열리는 걸 내가 설정을 해준건지 모르겠음)
three-way merge와 같은 상황에서 fast forward merge처럼 하는 방법이다. three-way merge는 merge commit이 남는데, 그런 지저분한(?) 히스토리가 남는 게 싫을 때 유용한 rebase.
다른 개발자와 함께 같은 브랜치를 작업하고 있다면 rebase는 좀 위험하다. 내가 rebase하고 push를 하게 되면, 커밋이 달라지게 된다. (세상에 같은 커밋은 없기 때문..) 그래서 원래의 커밋과 내용은 같을지라도 전혀 다른 커밋이 되기 때문에 나중에 merge conflict이 발생할 수 있다. 이미 히스토리가 서버에 업로드 되어 있다면 업로드된 히스토리는 절대 rebase 하면 안 된다. 아직 서버에 업로드 하지 않은, 나의 local에 있는 커밋에 대해서는 마음껏 rebase해도 된다.
마스터 브랜치에서 만든 a 브랜치, a 브랜치에서 만든 b 브랜치가 있을 때, b 브랜치의 베이스를 마스터 브랜치로 옮기는 작업을 할 때 유용하다.
git rebase --onto (바꿀 base) (원래 base) (옮길 branch)
git rebase --onto master a b
이렇게 rebase를 하고 나면 master 브랜치에 b 브랜치를 fast-forward merge 가능하다.
필요한 커밋만 쏘옥 가져올 수 있는 기능
git cherry-pick (가지고 올 커밋 해시코드)
아직 커밋할 단계는 아닌데 다른 작업을 해야할 때 임시 저장할 수 있는 기능. stash stack에 넣어두면 된다. bug fix를 다양한 버전으로 시도해 볼 때도 유용하게 쓸 수 있다.
git stash push -m ""
git stash list
git stash apply (stash id)
가장 최근 stash를 꺼내면서 목록에서 지우고 싶을 때는
git stash pop
git stash drop (stash id)
전체 지우기
git stash clear
git stash branch (새로 만들 branch 이름)