해당 게시물은 하단 링크의 포스팅을 참고하였습니다.
이전 게시물에 이어 Git의 기본 용어들을 몇 가지 더 알아본 뒤, GitKraken으로 실습해보겠습니다.
이전 게시물에서 저희는 working directory, stage, repository, add, commit을 배웠습니다. 이제 다음 작업을 위한 몇 가지 필수 용어를 git 명령어와 함께 알아보겠습니다.
다음 명령어는 파일의 상태를 확인하는 명령어입니다. 이는 GitKraken에서 예쁘게 칸을 나눠 보여줍니다.
Untracked : 관리대상이 아님Tracked : 관리 대상$ git status
git commit으로 로컬저장소에 스냅샷을 찍는 것은 말그대로 로컬(내 컴퓨터)에서만 이용 가능한 상태입니다. 이 스냅샷을 서버에 올려 다른 사람들과 공유하기 위해서는 원격 저장소(remote repository)에 업로드해야 합니다. 해당 명령어를 입력하면 로컬 저장소의 커밋된 모든 내용이 원격 저장소로 올라갑니다.
$ git push {원격 저장소 이름} {브랜치 이름}
원격 저장소의 데이터를 가져오고, 자동으로 현재 작업하는 로컬 브랜치와 merge 합니다.
→ 업데이트의 개념과 유사
fetch + merge
$ git pull {원격 저장소 이름} {브랜치 이름}
push하기 전에pull을 하지 않으면 이미 원격 저장소에서 변경사항이 일어났을 때 push에 실패합니다. 수시로 원격 저장소에 있는 변경 사항을 pull받는 것이 충돌을 예방할 수 있습니다.
로컬에는 없지만 원격 저장소에 올라가 있는 데이터를 모두 가져옵니다.
$ git fetch {원격 저장소 이름}
git pull과의 차이점
:git fetch는 자동으로 merge 작업을 하지는 않습니다!
현재 작업 중인 브랜치에 합칠 커밋을 지정해서 병합합니다. { }에는 주로 병합할 branch 이름을 넣고, 커밋 해시값을 넣어도 된다.
$ git merge { }
브랜치 전환 명령어입니다. 예를 들어 현재 작업하던 브랜치에서 feature 브랜치로 전환하려면 아래와 같은 명령어를 실행하면 됩니다.
$ git checkout feature
이전 게시글에서 작업하던 것에 이어 GitKraken 실습을 진행하겠습니다.
먼저 push를 진행해보겠습니다. 이는 로컬저장소를 원격저장소로 업로드하는 작업입니다. 아래 그림과 같이 상단의 push 버튼을 누르고 새롭게 나타나는 yes 버튼을 눌러줍니다.

아래와 같은 화면이 나타납니다. gitkraken-test 라는 원격 저장소에 push하겠다는 의미입니다. 임의대로 Remote Name, Description, Access를 변경해준 뒤, 하단의 Create remote and push local refs 버튼을 눌러줍니다.

본인의 깃허브 repository에 들어가보면 성공적으로 push된 것을 확인할 수 있습니다.

이전까지는 로컬저장소에 test.txt 파일밖에 없었습니다. 다음과 같이 test2.txt와 test3.txt 파일을 추가해줍시다. 그리고 기존에 존재하던 test.txt 파일을 수정해주겠습니다.

그러면 GitKraken이 변경사항을 감지해 아래와 같은 화면이 나타날 것입니다. 여기서 파일 수정을 해준 test.txt은 아이콘이 주황색 연필이고, 새로 생성해준 test2.txt와 test3.txt는 아이콘이 초록색 +입니다. 위 status에서 설명한 것처럼, 수정된 파일은 tracked이고, 생성된 파일은 untracked인 것을 확인할 수 있습니다. 일단 add 후 commit해주겠습니다.

위에서 생성, 수정된 파일의 아이콘을 살펴봤습니다. 그럼 삭제된 파일은 어떻게 나타날까요? test2.txt를 삭제해보겠습니다. 빨간색 - 아이콘으로 나타나네요. 이 변경사항도 add 후 commit해주겠습니다.

참고로, 상단의 톱니바퀴를 눌러보면 commit 히스토리에 나타나는 정보들을 선택할 수 있습니다.
- branch/tag
- graph
- commit message
- author
- date/time
- sha (commit hash)
깃을 이용해 서비스를 만들었다고 가정해 봅시다. 서비스를 만드는 과정에서 여러 커밋이 쌓였을 것입니다.

그러다 서비스가 충분히 개발됐다고 판단하면 여러분은 사용자에게 결과물을 릴리스할 것입니다.
이 때, 사용자에게 릴리스할 서비스의 버전은 어떻게 나타내는 것이 좋을까요?
이럴 때 태그(tag)를 사용합니다. 태그는 특정 커밋에 붙일 수 있는 꼬리표와 같습니다. 릴리스되는 커밋(버전)에 태그를 붙인다면 커밋이 여러 개 있는 상황에서도 의미 있는 커밋이 무엇인지 한 눈에 알아보기 쉽습니다.

GitKraken을 이용해 태그를 붙여봅시다. 태그를 붙이고자 하는 커밋 히스토리에 마우스를 올리고 우클릭합니다. Create tag here을 클릭합니다.

태그명을 작성한 다음 엔터를 눌러줍니다.

그럼 다음과 같이 태그가 추가된 것을 확인할 수 있습니다.

수정된 파일은 GitKraken에서 주황색 펜 아이콘으로 나타납니다. 네모 박스를 클릭해줍니다.

아래와 같이 'modified'가 추가되었다는 것을 확인할 수 있습니다.

마지막으로 커밋한 내용을 되돌리는 방법에 대해 알아봅시다. 커밋한 내용을 되돌리는 방법에는 revert와 reset이 있습니다.
revert여기서 여러분들은 다섯 번째 버전을 네 번째 버전으로 되돌리고 싶습니다.

다섯 번째 버전을 revert하면 다음 그림과 같이 네 번째 버전으로 되돌아간 여섯 번째 커밋이 만들어집니다. 첫 번째 버전부터 다섯 번째 버전은 그대로 유지됐음을 알 수 있습니다.

이렇게 버전을 되돌리는 방식을 revert라고 합니다.
GitKraken에서 커밋에 대고 마우스 오른쪽 클릭을 하면 다음과 같이 Revert commit이 있다. 이를 누르면 이전 버전으로 돌아간 새로운 커밋이 생성되는 것을 확인할 수 있다.

reset다음과 같이 버전 세 개가 만들어진 상황을 가정해봅시다.

여기서 두 번째 버전으로 reset하면 다음과 같은 상태가 됩니다. 세 번째 버전과 네 번째 버전은 삭제되었죠.

reset에는 크게 세 종류 soft, mixed, hard가 있습니다. 커밋은 1) 작업 디렉터리에서 변경 사항 생성하기 2) 스테이지로 add 3) commit 작업을 통해 이루어집니다. 세 종류의 reset은 이에 차이가 있습니다.
soft reset: commit 되돌리기, 즉 1)번 과정과 2)번 과정은 그대로 유지mixed reset: add와 commit 되돌리기, 즉 1)번 과정 그대로 유지hard reset: 작업 디렉터리 내 변경 사항까지 통째로 되돌리기GitKraken에서 커밋에 대고 마우스 우클릭을 하면 Reset main to this commit > 3가지 옵션이 나타난다. 임의대로 선택함으로써 reset을 원하는 작업까지 진행할 수 있다.

깃은 스태시(stash)라는 임시 저장 기능을 지원한다. 이 장을 마무리하며 스태시를 이용한 작업의 임시 저장을 학습해 보겠다. 임시 저장 기능은 언제, 어떤 상황에서 사용하게 될까?
개발하는 과정에서 작업 내역이 썩 마음에 들지 않지만 버리기는 아까울 때가 있을 수 있다.

또는 갑자기 다른 더 중요한 일을 처리해야 할 때가 있을 수 있다.

이런 상황에서는 지금까지의 변경 내역을 전부 지워버리는 것보다 어딘가에 임시 저장해두는 것이 좋을 것이다. 스태시를 하게 되면 작업 디렉터리에서 생성한 모든 변경 사항이 임시 저장되고, 작업 디렉터리는 변경 사항이 생기기 전의 깨끗한 상태로 돌아간다.
만약 위와 같은 상황에서 스태시하면 작업 디렉터리는 수정되기 전의 상태로 되돌아가고, 변경 내역은 임시 저장된다. 작업 디렉터리가 변경 사항이 생기기 전인 깨끗한 상태로 되돌아갔으니 이제 다른 변경 사항을 만들 수 있다.

또한, 다음 그림처럼 서로 다른 변경 사항 여러 개를 임시 저장할 수도 있다.

스태시로 임시 저장된 변경 사항들은 언제든 다시 꺼내어 작업 디렉터리에 다시 적용할 수 있다.

스태시는 깃이 변경 사항을 추적하는(
tracked) 파일에만 사용할 수 있다. 다시 말해, 스테이지에 이미 올라와 있거나 한 번이라도 커밋한 적이 있는 파일에만 사용할 수 있다. 방금 막 생성한 파일처럼 깃이 기존에 변경 사항을 추적하지 않은(untracked) 파일에는 스태시를 사용할 수 없다.
실습해보자.
다음과 같은 파일 상황이 있다.

A.txt 파일에는 문자 A가, B.txt 파일에는 문자 B가, C.txt 파일에는 문자 C가 작성되어 있다.
A.txt 파일에 문자 A를 지우고 문자 B를 작성하고, B.txt 파일에 문자 B를 지우고 문자 A를 작성하겠다. test3.txt 파일은 삭제하겠다.
위 작업을 한 후 GitKraken을 보면 다음 화면과 같이 나타날 것이다. 상단 바에 Stash 버튼을 누른다.

그러면 그래프의 최상단에 점선으로 된 네모박스가 생기고, 우측 GitKraken이 감지한 변경 내역이 전부 사라진 것을 확인할 수 있을 것이다. 임시저장(stash)된 목록은 좌측 메뉴바에서도 확인할 수 있다.
이 stash된 아이콘을 우클릭하면 stash를 삭제할 수도 있고, 임시저장된 변경내역을 새로 적용할 수도 있다.
