반응형

 

https://blog.lockcept.kr/61

 

Git 기본 (1) : init, status, add, commit, push, track

Git을 대충 사용 할 줄은 알았지만, Git의 근본 원리부터 완벽히 알지는 못하여서 공부를 하며 알게된 점에 대해 포스팅을 작성하고자 한다. 아직 정리하여 글을 작성하지 못하여서 일단 정보를 최대한 기록한 뒤..

blog.lockcept.kr

 

기존의 Git 글에 이어서 branch, checkout, merge, diff, pull & fetch 에 대해 작성하도록 하겠다.

 

 

기존 글의 마지막 상태이다. 현재 master branch 위에 있다.

 

 

1. branch

 

branch는 마지막 커밋을 가리키는 포인터 이다.

그리고 각각의 커밋은 자신의 부모 커밋을 가리킨다.

현재 master branch는 특정 커밋을 가리키고 있을 것이다.

 

git branch 명령어를 사용하면 현재 branch 목록을 볼 수 있다. -r, -a 옵션을 통해 remote, all branches 를 볼 수 있다.

 

git branch new-branch old-branch 를 통해 새 브랜치를 만들 수 있고, 기존 브랜치와 같은 commit 을 가리킨다.

 

위의 예시에서는 git branch test master 를 통해 test 라는 이름의 브랜치를 생성하였으며 master branch 가 가리키고 있던 commit 을 가리키게 된다.

 

git branch -m 옵션으로 이름을 변경할 수 있으며, git branch -m test lockcept 이후 git branch 로 확인하자 test가 lockcept이 되어있는 모습이다.

 

git branch -d 옵션을 사용하면 branch를 delete 할 수 있다.

 

 

2. checkout

 

checkout 옵션은 내가 지금 작업할 branch를 변경하는 목적이다.

단순히 git checkout master 를 사용하면 master branch로 현재 작업 branch (HEAD) 를 변경하게 된다.

-b 옵션을 같이 사용하면 branch를 만들면서 checkout 한다. 이미 존재하면 불가능 한데, -B를 사용하면 reset 하며 이동한다.

 

-t 옵션은 기존에 언급했던 track 개념으로, git checkout -t origin/master 를 사용하면 원격 저장소 origin의 master 브랜치와 연결된 local branch master를 생성한다.

위의 예제에서는 master가 이미 존재하여 실패하였다.

-b 옵션을 추가하여 새 브랜치를 생성하며 track할 수도 있다. 위 그림의 abc branch와 같다.

 

 

3. merge

 

merge를 설명하기에 앞서, 위의 명령어들을 사용하여 branch a, b를 만들고

a branch에는 수정된 a.txt를 commit

b branch에는 추가된 b.txt를 commit

하였다.

 

 

 

merge는 두 branch를 병합하여 새로운 commit을 만든 후, 부모로 두 branch의 마지막 commit를 가리키게 한다.

만약 두 branch가 포함관계라면 fast-foward 라는 방식을 통해 새로운 commit이 생기지 않게 할 수도 있다.

 

b의 위치에서 a를 merge하면 a를 가져와 b에 붙이는 것이다.

merge 이후 log를 보면 최종 commit이 존재하고 (commit message는 merge 할 때에 변경 가능)

 

두 부모 d7acaef, 4f14126을 가진다.

 

 

4. diff

 

diff는 두 커밋, 혹은 두 브랜치의 차이점을 보기 위한 명령어이다.

git diff a b 를 통해 두 branch의 차이점을 확인 할 수 있다.

commit 간의 차이점을 확인하기 위해서는 hash 값을 적어주면 된다.

git diff HEAD^ HEAD는 HEAD^ (HEAD 직전 commit)과 HEAD의 차이를 보여준다.

 

 

5. git pull & fetch

 

git pull 은 전에 소개한 git push 의 반대 개념이다.

원격 저장소의 branch를 가져와 local 저장소의 branch에 merge 한다.

이때 branch를 가져오는 과정이 fetch이다. fetch는 원격 저장소의 branch를 가져오기만 하고, merge 하지 않는다.

 

pull은 정확히 fetch & merge 활동이다.

 

 

이렇게 Git의 기본적인 명령어들을 알아보았다.

반응형