- fast-forward (빨리감기)
: merge를 진행할 때의 방법중의 하나. pull은 fetch + merge의 두가지 동작이 이루어지는데 merge를 진행할 때 보통은 merge commit을 생성하여 합치지만, fast-forward merge는 단순하게 HEAD만 이동시켜서 코드를 업데이트 시켜준다.
- fast-forward merge
- 3-way merge
(출처: backlog.com/git-tutorial/kr/stepup/stepup3_1.html)
=> 두가지 merge방법 모두 conflict가 일어날 수 있으므로, conflict가 발생할 경우, 풀어주면서 merge를 진행하면 되겠지만, history상으로 보기 좋지 않을 것이다. 그래서 앞서 학습했던 rebase를 사용하는 경우에는 history가 깔끔히 정리가 될 것이다.
- fetch (가져오기)
: 원격 저장소의 내용만 받아오고, 로컬 저장소의 브랜치와 병합은 진행하지 않는다.
- Tag (태그)
: 커밋을 참조하기 쉽도록 알기 쉬운 이름으로 붙이는 것. 한번 붙인 태그는 브랜치처럼 위치가 이동되지 않고 고정됨.
태그는 이와같이 사용될 수 있다.
=> PR을 통해 코드를 Merge한 이후, 운영환경에 실제 배포를 했는데, 장애가 발생한다면, 어떤 특정 상태로 롤백시킬때 기준으로 삼도록 할 수 있음
=> 특정 APP버전에 맞도록 하는 배포코드 history관리성으로 사용할 수 있다.
- 일반 태그(Lightweight tag)
- 이름만 사용
- 주석 태그(Annotated tag)
- 이름, 설명, 서명, 이메일, 날짜 등의 정보를 사용
[command]
$ git tag [태그명]
: 태그를 추가한다.
$ git tag -am "주석내용" [태그명]
: 태그 추가시, 주석이 달린 태그를 추가한다.
$ git tag [옵션]
: 등록된 태그 목록을 본다
(!) tag 옵션
-n : 태그 목록 + 주석 내용 확인
$ git log --decorate
: 깃 history조회시, tag까지 확인
$ git tag -d [태그명]
: 태그를 삭제한다.
- commit --amend (커밋 메시지 수정하기)
: 직전 커밋의 메시지이름을 수정한다. (rebase처럼 commit hashkey가 변경됨)
[command]
$ git commit --amend
message창이 나타나는데, 수정할 내용을 입력한다.
- revert (커밋 되돌리기)
: 지정한 커밋 내용을 새로운 커밋을 통해서 되돌린다.
[command]
$ git revert [되돌릴 커밋 hashKey]
예제)
1] test222의 내용이 있는 커밋을 되돌려보자.
2] 명령어 입력 (명령어를 입력하게 되면, edit창이 노출되는데, 기본적으로는 Revert "되돌리는 커밋메시지"로 설정이 되는데, 메시지명도 변경이 가능하다.)
3] 커밋 되돌리기 완료. 새로운 커밋이 생성된 부분은, 작업했던 내용을 반대로 적용시켜준다.
- reset (되돌리기2)
: revert와 마찬가지로 커밋을 되돌리는 목적으로 사용한다. 하지만 revert와 다른점은, git의 HEAD를 자유롭게 이동하여 적용을 하기때문에, commit이력이 삭제될 수도 있다. 해당 기능을 사용할때는 주의를 해야한다.
[command]
$ git reset [type] [hashKey]
(!) [type] 설명
--hard : stage, unstage에 있는 진행중인 작업모두 초기화가 되고, working directory의 HEAD를 지정한 [hashKey]의 상태로 이동(=변경)한다.
(!) working directory란? 각 commit들로 이루어진 브랜치 history들
-- mixed (default값) : stage, unstage에 있는 진행중인 작업은 유지시키면서, working directory의 HEAD를 지정한 [hashKey]의 상태로 이동한다.
-- soft : working directory의 HEAD를 지정한 [hashKey]의 상태로 이동시키면서, 현재커밋 ~ [hashKey] 사이에 변경된 내용들을 unstage 상태로 변경한다.
(!) [hashKey]를 sdjanv833fnvwskncu38sd98 <-- 이런 형태가 아닌, HEAD에서 n번째~의 형태로도 지정할 수 있다. 예를들어 git reset --hard HEAD~3 이라는 명령을 내리면, 현재 HEAD(일반적인 상황에서는 최신커밋 기준)에서 3번째 전으로 되돌아가라는 뜻이다.
- cherry-pick
: 특정 커밋 1개를 가져와서 커밋을 만든다.(=작업 복사)
보통 다른 브랜치에서 내브랜치에 필요한 내용을 가져와서 적용시킨다. 자신의 브랜치의 커밋을 cherry-pick 할 수도 있지만, 99% 코드충돌이 발생할 것이다. 또한 다른 브랜치에서 작업내용을 가져오게되면, 나중에 cherry-pick 해온 브랜치와 merge를 하는 상황이 생기는 경우에 충돌이 일어날 가능성이 있으므로, 유의해야한다.
[command]
$ git cherry-pick [hashKey]
- interactive rebase (대화형 재배치)
: 대화형 재배치. commit history관리에 매우 유용하다.
[command]
$ git rebase -i [hashKey]
: 여기서, [hashKey]는 rebase할 범위를 지정할 기준점이며, 이 기준점 "이전~" 까지의 범위이다.
$ git commit --amend
: 커밋 내용을 편집한다. 이 명령어를 실행하면 커밋에 대한 편집기가 열린다.
$ git rebase --continue
: edit, squash 등 커밋 변경작업 진행시, 변경을 다 진행했으면 rebase를 계속 진행하라는 명령
$ git rebase --abort
: 현재 rebase 진행중인 작업을 중단시키는 명령
해당 내용은 개념적으로 접근이 조금 어려울 수 있으며, 설명이 길어질 수 있으므로 저보다 설명을 더 잘해주신 분의 링크로 대체하겠습니다.
(참고: beomseok95.tistory.com/231)
'Git' 카테고리의 다른 글
Git - SVN과의 비교 (0) | 2022.03.10 |
---|---|
Git - Branching Model (0) | 2021.02.25 |
Git - 동작 정리 (기본편) (0) | 2021.02.16 |