Git은 branch를 기반으로 사용되기 때문에, 중요하고 반드시 이해가 필요한 부분입니다.
Git은 commit을 할 때마다 파일이 존재하는 순간을 중요하게 생각합니다. 만약 파일이 수정되지 않았다면, Git은 빠른 성능을 위해서 파일을 새로 저장하지 않고 이전 상태의 파일에 대한 링크만 저장합니다. 이런 경우에는 수정사항을 저장하지 않고, 파일의 스냅샷을 시간순으로 저장합니다.
그래서 Git에서는 이전의 스냅샷과 현재의 스냅샷을 비교해서 변경된 사항만을 볼 수 있습니다.
위와 같이 저장될 때 스냅샷으로 저장되기 때문에 개발자가 중앙 서버에서 새로운 프로젝트를 받으면(git checkout) 해당하는 repository의 특정 시점의 스냅샷을 받게 됩니다. 일반적으로는 가장 최신 버전을 받습니다.
이렇게 개발자들이 각각의 스냅샷을 checkout 받고 개발을 하면, 최종적으로 각자의 변경사항을 반영한 스냅샷을 만드는 과정이 필요하게 됩니다. 그러기 위해서 특정한 기준이 필요한데, 그럴 때 필요한 것이 branch입니다.
나뭇가지 혹은 분점을 말하는 branch는 말 그대로, 기준이 되는 큰 줄기가 있고 그 줄기에서 옆으로 나오는 가지와 같은 구조입니다. 기준이 되는 큰 줄기를 master branch라고 하고, 각각의 개발자는 master branch에서 checkout하고 자신만의 branch를 만듭니다. 각각의 개발자로부터 나온 줄기들을 feature branch라고 합니다. feature branch에서 개발자들은 각자 개발을 하다가 개발이 끝나고 commit을 하면, 자신의 feature branch를 master branch로 합치게 됩니다. 이렇게 feature branch에서 master branch로 합치는 과정을 merge라고 합니다.
👉 branch에서 merging하는 과정
1. master branch를 checkout 합니다.
2. feature branch를 각자 만듭니다.
3. feature branch에서 각자 개발합니다.
4. 개발이 끝나면 commit 합니다.
5. feature branch를 master branch와 합칩니다(merge).
git clone
특정 git repository를 가져옵니다.
git init
프로젝트(소스코드들이 있는 디렉토리)를 git repository로 만들기 위해서 사용하는 명령어 입니다. 디렉토리를 git repository로 만들어야 git으로 버전 관리를 할 수 있습니다.
git branch
branch를 생성할 때 사용됩니다.
git checkout
branch를 checkout 할때 사용되는 명령어입니다.
git add
파일의 수정 사항들(Modified)을 staged 상태로 변경할 때 사용하는 명령어 입니다. git repository에 새로 추가된 파일들을 staged 상태로 옮길때도 사용됩니다. 새로이 추가된 파일들은 "untracked" 파일 이라고 하는데, git에서는 이들도 수정 사항이라고 인식합니다.
git commit
staged 된 파일들을 commit 하고자 할때 사용하는 명령어 입니다.
git push
branch에서 commit한 파일들을 원격 저장소로 보내 동일한 상태로 만들어줍니다.
git diff
어떤 수정 사항들이 적용됐는지 볼 때 사용하는 명령어 입니다. 참고로 staged 된 수정 사항들은 git diff로 볼 수 없습니다. Modified 된 파일들만 git diff로 볼 수 있습니다.
git status
현재 상태를 보여주는 명령어 입니다. 어떠한 파일들이 modified가 되었고 어떠한 파일들이 staged가 되었는지 등의 전체적인 상황을 보여줍니다.
git log
Commit 내역들을 보여줍니다. Commit history라고도 합니다. git log를 통해 이제까지 커밋 내역들을 전부 볼 수 있습니다. 다만 출력되는 포맷이 보기가 쉽지가 않아서 tig 같은 tool을 사용하면 훨씬 편리합니다.
git rm
원하는 파일을 git repository에서 삭제합니다.
git mv
원하는 파일을 git repository 상에서 이동 시킬때 사용합니다. 파일의 이름을 바꿀 수도 있습니다.
👉 전체적인 Git 사용 순서
git clone
or git init
git branch feature/'name'
git checkout feature/'name'
git add .
git commit -m "message"
git push origin feature/'name'
compare pull&request
merge
conflict발생시
git checkout master
git pull origin master
git checkout feature/'name'
git merge master
수정 후...
git add .
git commit -m "something"
git push
검색하다가 들어왔는데 효식님 블로그네요 ㅋㅋ 반가워요 효식님!!