Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

[git] 자주 사용하는 명령어 - commit, branch, checkout, merge, rebase, reset, revert 본문

네이버클라우드 AIaaS 개발자 양성과정 1기/git, 리눅스

[git] 자주 사용하는 명령어 - commit, branch, checkout, merge, rebase, reset, revert

끈기JK 2023. 3. 30. 09:33

 

git commit

 

commit 메시지 제목 맨 앞에 아래와 같이 키워드 추가한다.

  • feat : 새로운 기능 추가, 기존의 기능을 요구 사항에 맞추어 수정
  • fix : 기능에 대한 버그 수정
  • build : 빌드 관련 수정
  • chore : 패키지 매니저 수정, 그 외 기타 수정 ex) .gitignore
  • ci : CI 관련 설정 수정
  • docs : 문서(주석) 수정
  • style : 코드 스타일, 포맷팅에 대한 수정
  • refactor : 기능의 변화가 아닌 코드 리팩터링 ex) 변수 이름 변경
  • test : 테스트 코드 추가/수정
  • release : 버전 릴리즈

 

 

 

git branch

 

브랜치를 만들면서 checkout 까지 한번에 하려면 git checkout -b 옵션을 준다.

$ git checkout -b iss53
Switched to a new branch "iss53"

위 명령은 아래 명령을 줄여놓은 것이다.

$ git branch iss53
$ git checkout iss53

그림으로 나타내면 다음과 같다.

 

작업 후 iss53 브랜치에서 commit 시 -a 옵션으로 staging 후 커밋 할 수 있다.

$ git commit -a -m 'added a new footer [issue 53]'

그림으로 나타내면 iss53 이 앞으로 나아간 것을 볼 수 있다.

 

 

 

원격 저장소의 브랜치 가져오기

 

# 리모트 저장소의 브랜치 목록 보기
$ git branch -r

# 리모트, 로컬 저장소의 브랜치 목록 보기
$ git branch -a

# 리모트의 origin/create-meeting 브랜치 가져오기
$ git checkout -t origin/create-meeting

 

 

원격 저장소 브랜치 로컬에 업데이트

 

$ git remote update

 

 

브랜치 명 변경

 

$ git branch -m branch-test2

 

 

 

git checkout

 

이전 버전을 보고 싶을때 사용한다.

 

git log. - 명령 입력 후, 위 아래 방향키로 원하는 버전 커밋 찾기

git checkout 복사한 4자리 이상 해시코드 - 현재 소스가 해당 버전으로 돌아간다.
git checkout 브랜치 이름 - 되돌아오기(해당 브랜치의 최신 커밋으로 돌리기)

 

 

 

git merge

 

merge 의 기초

위 상황에서 master 에서 iss53 을 merge 한다.

$ git checkout master
Switched to branch 'master'
$ git merge iss53
Merge made by the 'recursive' strategy.
index.html |    1 +
1 file changed, 1 insertion(+)

그러면 공통조상 + master + iss53 을 합친 3-way merge 를 한다.

merge 의 결과이다.

merge 후 더는 iss53 브랜치가 필요 없으므로 브랜치를 삭제한다.

$ git branch -d iss53

 

 

충돌의 기초

merge 하는 두 브랜치에서 같은 파일의 한 부분을 동시에 수정하고 merge 하면 3-way merge 가 실패한다.

$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

 

git 은 자동으로 merge 하지 못해서 새 커밋이 생기지 않는다. 변경사항의 충돌을 개발자가 해결하지 않는 한 merge 과정을 진행할 수 없다.

git status 명령으로 merge 하지 못한 파일을 확인한다.

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

    both modified:      index.html

no changes added to commit (use "git add" and/or "git commit -a")

충돌이 일어난 파일은 unmerged 상태로 표시된다.

<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
 please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

======= 위쪽은 HEAD 버전(merge 명령을 실행할 때 작업하던 master 브랜치)의 내용이고 아래쪽은 iss53 브랜치의 내용이다. 충돌을 해결하려면 위쪽이나 아래쪽 내용 중에서 고르거나 새로 작성하여 merge 한다.

충돌 해결 후 다시 커밋하고 git status 로 충돌이 해결되었는지 확인한다.

 

 

 

git rebase

 

git에서 한 브랜치에서 다른 브랜치로 합치는 방법으로는 두 가지가 있다. 하나는 Merge 이고 다른 하나는 Rebase 이다.

 

 

 

git reset

 

아직 원격 저장소에 push 하기 전이라면 reset 을 사용할 수 있다.

 

문법은 아래와 같다.

$ git reset --옵션 커밋해시

 

옵션에 대해 간략하게 살펴보자.

1) hard
돌아가려는 커밋 이후의 모든 내용을 지워 버린다.
staging area와 working directory 모두 돌아가려는 커밋과 동일해진다.

2) soft
돌아가려는 커밋으로 되돌아가고, HEAD가 돌아가려는 커밋을 새롭게 가리키게 된다.
staging area와 working directory는 아무런 변화도 없다.

3) mixed
돌아가려는 커밋으로 되돌아가고, HEAD가 돌아가려는 커밋을 새롭게 가리키게 된다.
staging area는 돌아가려는 커밋과 동일해지고, working directory는 아무 변화가 없다.

 

 

 

git revert

 

이미 원격 저장소에 push한 상태라면 reset은 사용할 수 없고 revert를 사용해야 한다.

 

우선 git log로 해시주소를 파악해야 한다.

commit3        54c6547
commit2        a516d21
commit1        4567289    // 되돌아가려는 커밋

내가 돌아가려는 커밋이 commit1이면,
commit3를 먼저 revert하고 이후 commit2를 revert하는 방식으로 순차적으로 진행해야 한다.
아래와 같이 입력하면 된다.

$ git revert 54c6547
$ git revert a516d21

이후 commit을 하면 끝이다.
git log를 다시 찍어보면 revert가 잘 된 것을 확인할 수 있을 것이다.