2016.10.13(THU)
L03 Git 실습
프로젝트 생성
터미널 or cmd 창을 연다.
mkdir -/MyProject //MyProject라는 폴더 생성
터미널을 열면 최초 경로가 user 폴더에 로그인 된 유저의 경로가 된다.
명령어가 익숙하지 않다면 탐색기(finder)로 경로를 찾아가 폴더를 생성하면 된다.
echo “Hello Git”>test.txt
테스트할 프로젝트 생성 test.txt를 생성
명령어가 익숙하지 않다면 탐색기(finder)로 경로를 찾아가 파일을 생성
git 로컬 저장소(Git Local repository)를 만들고 프로젝트 등록하기
git init
git으로 관리하고 싶은 프로젝트가 있는 폴더로 이동 후 git init 명령을 하면 로컬 저장소가 만들어 진다.
git status
untracked file로 Working Directory(작업 폴더) 영역에 파일이 Staging
Area(index)에 추가되지 않아 아무런 작업도 할 수 없는 상태이다.
git add test.txt
add는 작업할 프로젝트를 추적하는 명령어
git status
tracked file은 test.txt이고 추적 중인 파일이 index에서 Local Repository
(저장소)로 저장되기를 기다리고 있다. 이때 상태는 “Changes to be
committed”이다.
test.txt 내용 수정
내용
<body>
<master>Hello git</master>
</body>
git satus
“Changes not Staged for commit”으로 test.txt를 저장소에 등록할 수
없는 상태이다.
추적(tracked)중인 프로젝트를 수정했을 시 다시 git add로 수정한 프로젝트를 index에 올려야 저장소에 저장(commit)할 수 있다.
git commit -m “master initial v0”
-m은 프로젝트에 코멘트를 다는 것
test.txt를 수정한 상태이기 때문에 바로 commit을 할 수 없다.
git commit -a -m “master initial v0”
-a는 추적(tracked) 중인 파일을 자동으로 add 한다.
git status
untracked files로 추적 중인 프로젝트가 commit 되면 추적을 마치게
된다.
git log
commit 상태를 확인할 수 있다. 빠져나오기 ctrl+z
git branch topic
topic 가지를 만든다.
git checkout topic
Head 포인터를 topic 가지로 옮긴다.
topic 가지를 만들고 바로 HEAD를 옮기고 싶다면
git checkout -b topic
test.txt의 내용을 수정하고 저장
내용
<body>
<master>Hello git</master>
</body>
<footer>company info</footer>
git status
Chages not staged for commit
git commit -a -m “insert footer topic v0”
topic 가지를 저장소에 저장
merge로 가지 병합하기
git checkout master
test.txt의 내용을 확인하면 자동으로 master 가지에서 마지막 commit 했던
상태로 되돌아가 있다.
test.txt의 내용을 수정하고 저장
내용
<header>menu</header>
<body>
<master>Hello git</master>
</body>
git commit -a -m “insert header master v1”
master 가지를 로컬 저장소에 저장
git checkout topic
master 가지를 topic과 병합하면 병합 후 사용하지 않을 topic 가지의 head 포인터가 이동하지 않기 때문에 topic 가지를 master 가지에 병합할 예정이다.
git merge master
topic 가지를 master 가지와 병합 후 새로운 commit을 만든다.
topic의 test.txt는 master의 test.txt와 병합된 결과이다.
topic의 HEAD는 master와 같은 가지에 있고 병합된 결과로 마지막 commit을 가리킨다.
master의 HEAD는 변동 사항이 없다.
git checkout topic
git merge topic
master HEAD를 topic의 마지막 commit 위치로 이동
mster와 topic은 같은 가지의 이력을 가지고 있기 때문에 이때 merge를 병합이라 부르기 부족한 부분이 있다.
이를 fast foward(빨리 감기) 병합이라 부른다.
git branch -d topic
topic 가지가 필요 없어졌기 때문에 삭제하였다.
병합 시 충돌 해결
git merge master
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
충돌을 의미한다.
병합 시 충돌이 일어났지만 topic과 master 가지는 병합이 되었으며 새로운 commit을 만들지 않고 대기 중인 상태에 있다.(충돌이 일어난 부분을 수정하고 commit 해야 한다.)
병합 실패 시 마지막 commit 이력을 등록하지 않으면 다른 동작을 할 수 없다.
git diff
병합 시 변동 사항 or 충돌이 일어난 위치를 표시해준다.
test.txt에서 충돌이 일어난 부분을 수정
<<<<< >>>>표시 안, 두 가지의 내용을 비교한 후 수정한다.
<<<<<< 충돌 표시를 삭제라고 저장한다.
git commit -a -m “topic merge maser”
병합이 완료 되었다.
git checkout topic
git merge topic
git branch -d topic
'IT story > Git' 카테고리의 다른 글
L05 Git 이력 되돌리기 (0) | 2016.10.22 |
---|---|
L04 Git Remote Repository (0) | 2016.10.21 |
L02 Git 설치 (0) | 2016.10.21 |
L01 Git 기본 원리 (0) | 2016.10.21 |