$ git init
$ git add file.txt
staging
$ git commit -m 'first commit'
$ git status
$ git branch issue1
$ git branch
issue1
* master
$ git switch -c <branch>
브랜치 생성과 변환까지 한번에
$ git merge <병합될 branch>
$ git switch main
$ git merge issue1
main이 issue1을 병합
$ git add .
$ git commit
충돌 시 수정 후 재실행
$ git branch -d issue1
브랜치 삭제
취소 : merge는 하나의 커밋이므로 reset
으로 가능하다.
당장 해결 불가 시 $ git merge --abort
로 중단.
$ git switch issue2
$ git rebase main
main---issue2(HEAD) 모양의 그림
$ git add .
$ git rebase --continue
충돌 시 수정 후 재실행
$ git switch main
$ git merge issue2
HEAD의 위치 옮기기
취소 : $ git rebase --abort
태그는 커밋에 이름을 붙이는 기능을 가진다.
이름 태그와 주석이 달린 태그로 나뉜다.
$ git tag <tagname>
이름 태그 생성
$ git tag
태그 목록 확인
$ git log --decorate
태그 정보를 포함한 이력 확인
$ git tag -a <tagname>
주석 달린 태그 생성
$ git tag -n
태그 목록과 주석 내용 확인
$ git tag -d <tagname>
태그 삭제
$ git commit --amend
커밋 수정하기
revert
삭제 작업을 실행하는 새로운 커밋 생성, 안전 삭제
reset
불필요한 커밋 버리기
$ git revert (돌아갈 커밋 해시)
$ git reset --hard (돌아갈 커밋 해시)
HEAD 위치 | 인덱스 | 작업 트리 | |
---|---|---|---|
soft | 변경O | 변경X | 변경X |
mixed | 변경O | 변경O | 변경X |
hard | 변경O | 변경O | 변경O |
push
로컬 -> 원격 (업로드)
pull
원격 -> 로컬 (다운로드, 업데이트)
clone
원격을 전체 복제
pull 한 코드를 변경하고 push 하려는데 그새 누군가 push 했을 때 나의 push는 거부된다. 그럴 때는 merge로 갱신해주면 된다. 갱신 과정에서 충돌 발생 시 직접 수정한다.
단순히 원격 저장소의 내용을 확인만 하고 로컬 데이터와 병합은 하고 싶지 않은 경우에는 fetch
명령어를 사용한다.
pull
= fetch
+ merge
cherry-pick
다른 브랜치에서 지정한 커밋을 복사하여 현재 브랜치로 가져오기
rebase -i
커밋을 다시 쓰거나 다른 커밋과 바꿔 넣을 수 있으며 특정 위치의 커밋을 삭제하거나 여러 커밋을 하나로 통합하는 작업을 할 수 있습니다.
https://backlog.com/git-tutorial/kr/
https://www.yalco.kr/@git-github/1-5/