어떻게 깃을 사용하는지 빠르게 알아봅시다. (Quick learn How to use Git.)
BSD-3-CLAUSE License
15분
3번
빠른 협업환경 조성
누가, 언제, 무엇을, 왜, 어떻게 수정했는지 코드리뷰가 가능.
이슈트래커 (Issue Tracker) 지원.
깃헙 (GitHub)을 이용하여 자신의 git을 쉽게 공유 가능.
지속적인 통합 (Continuous Integration) 지원.
Visual Studio, Jetbrains IntelliJ, Android Studio 등 대부분의 IDE에서 git 연동 제공.
요약: 협업을 위해서, 개발에서 사용, 두명 이상이 똑똑하게 소스를 공유하고 개발한 소스들을 합치세요!
git config
명령어를 이용하여 계정에 대한 정보를 설정합니다.$ git config --global user.name "Kenneth"
$ git config --global user.email "[email protected]"
git init
작업을 진행합니다$ git init
git init
을 하셨으면 git 리모트를 설정하실 수 있습니다.$ git remote add origin https://github.com/KennethanCeyer/tutorial.git
git clone
명령어를 사용하여 복사를 시작합니다.$ git clone https://github.com/KennethanCeyer/tutorial.git
git clone
을 통해 원격파일을 복사해오면, origin
에는 기본적으로 클론해온 리모트 URL이 저장되있습니다.SSH Key
등록을 권장합니다.ssh-keygen
명령어로 SSH Key를 생성하시면 됩니다.~/[사용자 폴더]/.ssh/
에 파일이 존재하는 것을 확인하실 수 있습니다.id_rsa.pub
는 GitHub에 등록해주셔야 합니다.Profile
중 Settings
메뉴를 눌러주세요 (아래 그림을 참고해주세요.)Settings
화면 중 우측 사이드메뉴에서 SSH and GPG keys
를 클릭해주세요.SSH Keys
화면에서 New SSH key
버튼을 찾아 클릭 해주세요.id_rsa.pub
의 내용을 입력해주시면 됩니다.Q. SSH 설정을 해도 아이디와 비밀번호를 물어봐요!
접속 정보에서 Use SSH를 클릭해 SSH 접속 정보를 이용하시기 바랍니다.
이때, git remote set-url
명령어를 이용하여 기존의 원격지 주소를 수정해야 합니다.
# 혹시 HTTPS 주소를 Remote URL로 사용하는지 체크해주세요.
# Remote URL은 ssh 포맷을 사용해주셔야 ssh 인증을 통해 아이디/비밀번호 입력을 넘어가실 수 있습니다.
# origin의 Remote URL 변경방법.
$ git remote set-url origin [email protected]:KennethanCeyer/tutorial-git.git
# origin의 Remote URL이 제대로 변경됬는지 체크해주세요.
$ git remote show origin
git add
명령어를 이용합니다.$ git add .
-f
옵션을 이용합니다.$ git add . -f
git remote show origin
을 통해 origin에 리모트 주소가 잘 등록되었는지 확인해보세요.staged
상태의 파일이 히스토리로 기록되고 적재됩니다.git status
명령을 이용해서 확인합니다.$ git status
git add
이후 git status
를 하면 아래와 같은 화면이 나옵니다.커밋
작업이 필요합니다.git commit
명령을 통해 Staged 상태의 파일을 커밋할 수 있습니다.-m
옵션을 이용하여 커밋 메시지를 작성하는 것을 권장합니다.--amend
옵션을 이용합니다.$ git add *
$ git commit -m "UI 레이아웃 이슈 수정."
# 수정사항 발생
$ git add *
$ git commit -m "UI 레이아웃 이슈 수정 및 관리자 벨리데이션 추가." --amend
git pull
과 git fetch
가 있습니다.# main 브랜치를 pull하여 업데이트
$ git pull origin main
# main 브랜치를 fetch하여 업데이트
$ git fetch origin main
pull
과 fetch
의 차이점은 merge
작업을 하느냐 안하느냐로 나뉘어지며.pull
은 fetch
+ merge
작업이라고 생각하시면 됩니다.git reset
명령을 사용합니다.$ git reset HEAD^ --soft
git reset
다음 인수로는 되돌리는 버전의 위치를 가리킵니다.
현재위치(HEAD)를 기준하여 상대적인 위치를 설정하거나, 특정 버전 리비전 고유의 해시값을 지정합니다.
HEAD를 확인하시고 싶으면 git reflog
명령을 이용합니다.
git reset
의 옵션 중 리셋 특성을 정하는 --soft, --hard, --mixed
옵션이 있습니다.
위 옵션은 아래에서 자세히 설명합니다.
--soft
는 약한특성의 리셋입니다, 되돌릴 때 기존의 인덱스와 워킹트리를 보존합니다.
--hard
는 강한특성의 리셋입니다, 되돌릴 때 기존의 인덱스와 워킹트리를 버립니다.
--mixed
는 중간특성의 리셋입니다, 되돌릴 때 기존의 인덱스는 버리고 워킹트리를 보존합니다.
되돌리는 위치의 경우 아래와 같은 타입이 있습니다.
# 바로 이전 단계로 인덱스와 워킹트리를 버리고 리셋.
$ git reset HEAD^ --hard
# 바로 두번째 전 단계로 인덱스와 워킹트리를 버리고 리셋.
$ git reset HEAD~2 --hard
# 특정 리비전의 기록으로 인덱스는 버리고 워킹트리를 보존하여 리셋.
$ git reset 991ee8c --mixed
이미지 출처 StackOverflow
branch의 특징은 아래와 같습니다.
기본은 main 브랜치라고 불리며, 필수로 제공되는 브랜치이다.
서로다른 브랜치들은 같은 조상을 가지고 있다.
브랜치를 새로 만드신다면 git branch [브랜치명]
으로 생성합니다.
아래 명령라인에서는 new라는 브랜치를 생성하고 있습니다.
$ git branch new
main 기준으로 new를 브랜치(가지치기)하면 main와 똑같은 소스코드가 new에도 적용됩니다. (* 예전에는 main 대신 master 브랜치를 기본으로 썼습니다, 예전 git 프로그램을 사용하시는 분은 master가 기본 브랜치로 보이게 됩니다.)
하지만 이 이후로 new에서 코드를 수정하면, main과 new는 서로 다른 코드가 되기 때문에 갈라집니다.
생성된 new 브랜치로 접속하기 위해서는 git checkout [브랜치명]
을 이용합니다.
$ git checkout new
git checkout
에 -b
옵션을 이용합니다.# 브랜치 new를 생성과 동시에 체크아웃.
$ git checkout -b new
git push [브랜치명]
을 이용합니다.$ git push origin new
git branch
명령에서 -d
옵션을 사용합니다.git merge
와 git rebase
가 존재합니다.이미지 출처 http://git.mikeward.org/
main
에서 sub
branch가 생성되었으며, main 브랜치에서 sub 브랜치를 머지하고자 합니다.* main -> some_file.txt의 내용
* 1번째 단계 HEAD
I'm a file.
* sub -> some_file.txt의 내용
* 2번째 단계 HEAD (최신)
I'm a file.
Inserted new line from the sub branch.
$ git checkout -f main
$ git merge sub
# 현재 브랜치 main, 대상 브랜치 sub.
# main에서 sub를 머지합니다.
# HEAD -> main
# sub -> sub
* merge 이후 main -> some_file.txt
I'm a file.
Inserted new line from the sub branch.
* main -> some_file.txt의 내용
Apple
main
브랜치의 some_file.txt의 내용이다.sub
브랜치이며, 복제 이후 한번 내용을 수정하였습니다.* sub -> some_file.txt의 내용
* 2번째 단계 HEAD
Banana
* main -> some_file.txt의 내용
* 2번째 단계 HEAD(sub랑 단계가 겹침)
Strawberry
* 머지 이후 main -> some_file.txt (충돌)
<<<<<<< HEAD
Strawberry
=======
Banana
>>>>>>> sub
HEAD
는 현재 브랜치(main)를 의미합니다.main
브랜치의 Strawberry를 선택하여 충돌을 해결하겠습니다.* 머지 이후 main -> some_file.txt (수정)
Strawberry
git add
와 git commit
으로 충돌(conflict)을 해결하세요.$ git add *
$ git commit -m "Solved the conflict issue."
이 가이드는 Creative Commons Attribution 4.0 (CCL 4.0)을 따릅니다.