태그 (tag) : 커밋을 참조하기 쉽도록 이름을 붙인 것
mkdir tutorial: tutorial 이라는 폴더 생성
cd tutorial : tutorial 폴더로 이동
git init : git 저장소 생성
git tag ~ 부터 : 커밋을 통해 HEAD 부터 생성해야하는데 tag 명령어를 먼저 써버림 (애초에 태그는 커밋을 참조하기 위한 것인데)
tutorial 폴더에 테스트용 텍스트 파일 생성 후 커밋을 진행하였다
git tag <"tag name"> : 태그 생성
git tag : 생성한 태그 목록 확인 -> first_tag라는 태그가 생성된 것을 확인
git log --decorate : 태그 정보가 포함된 커밋 이력 확인
git tag -a <"tag name"> : 주석이 달린 태그 추가
git tag -am "주석" <"tag name"> : 명령어 실행시 주석 담
태그 목록을 확인해보면 확인 가능
git tag -d <"tag name"> : 태그 삭제
--amend 옵선 : 누락된 파일 추가 / 기존 파일 업데이트 / 이전 커밋의 설명 변경
cd tutorial1 : tutorial1 폴더로 이동
git log : 커밋 확인
편집기 열어서 sample.txt를 수정한 후 -amend 옵션을 넣어서 커밋을 수정한다.
git log : 로그를 확인해보면 수정되어 있음을 알 수 있다.
revert : 이미 공개된 상태인 커밋을 내용을 지우는 새로운 커밋을 만든다 b-> b'
: 이전에 작성한 커밋을 안전하게 지움
cd tutorial2 : tutorial2 폴더로 이동
커밋 로그 확인 후 편집기를 열어 내용 확인
git revert HEAD : 현재 헤드의 커밋을 취소한다
편집기 열어 다시 확인 'pull~' 이 내용이 사라진 것을 확인 / 로그 확인해보면 커밋이 지워진 것을 알 수 있음(revert 했다는 내용의 커밋)
reset : 더이상 필요 없어진 커밋을 버리는 명령어
soft : 커밋만 되올리고 싶을 때
mixed : 변경한 인덱스의 상태를 원래대로 되돌리고 싶을 때
hard : 최근의 커밋을 완전히 버리고 이전의 상태로 되돌리고 싶을 때
디폴트는 mixed 이고 soft와 hard 는 선택으로 가능
cd tutorial3 : tutorial3 폴더로 이동
로그를 통해 커밋 확인, 편집기를 열어 내용 확인
(나머지는 오타...)
git reset --hard HEAD~~ : hard 옵션을 주어 커밋을 완전히 버림. 헤드의 이동 확인
편집기와 로그를 열어보면 내용이 사라진 것을 알 수 있다 (하드 옵션은 작업트리, 인덱스, 헤드의 위치 모두 이동시킨다.
cherry-pick : 다른 브랜치에서 지정된 커밋을 복사하여 현재 브랜치로 가져옴
: 커밋을 추가할 브랜치를 잘못 선택해서 옮기려고 할 때 / 다른 브랜치 커밋 현재 브랜치에도 추가하고 싶을 때
cd tutorial4
git branch : 브랜치 확인 (issue1 브랜치의 커밋을 master로 가져올 것이다)
git checkout issue1 : 커밋의 고유번호를 알기 위해 issue1 브랜치로 이동
git checkout master : master 브랜치로 이동
git cherry-pick "옮겨올 커밋 고유번호" : 병합 중 충돌 일어남
편집기 열어 수정 후 다시 커밋하면 그 커밋을 내 브랜치에 넣을 수 있다.
rebase : 커밋을 다시 쓰거나 다른 커밋과 바꿔 넣을 수 있다. 특정 위치의 커밋을 삭제하거나 여러 커밋을 하나로 통합 가능
: push 전 이전 커밋 내용 정리 / 커밋 통합 / 이전 커밋 시 누락된 파일을 나중에 추 가
5-1) 커밋 통합
tutorial5 폴더로 이동 후 로그에서 커밋 확인
git rebase -i HEAD~~ : 아래와 같이 편집기에서 통합할 커밋을 pick -> squash 로 변경하고 저장함
로그 확인을 통해 커밋이 통합된 것을 알 수 있다
5-2) 커밋 수정
tutorial6 폴더로 이동 후
git rebase -i HEAD~~ : 편집기 열리면 HEAD~~ 까지 있고 변경할 커밋을 pick -> edit으로변경 후 저장
편집기 열어 수정 후 커밋 변경 후 저장
git rebase --continue : rebase 실행
충돌 일어날 시 수정 후 다시 add 후 커밋
로그 확인 시 커밋이 변경된 것을 알 수 있다 ("commit~" 이 커밋을 수정해야하는데 "pull~"도 수정된 이유는 충돌 일어나서 수정할 때 "pull~" 이 커밋도 건드려버려서 그렇다..)
--squash : 이 옵션을 지정하면 병합시 해당 브랜치의 커밋 전체를 통합한 커밋이 추가됨
: 토픽 브랜치의 커밋을 한번에 통합 브랜치로 병합
tutorial7 으로 이동하여 master 브랜치로 이동
git merge --squash issue1 : 병합 시 --squash 옵션을 주어 issue1의 모든 커밋 내용을 master 브랜치에 하나로 통합하여 커밋됨
로그에서 확인해볼 수 있음