-
git 사용법 (상) 혼자작업편about front-end 2020. 5. 22. 23:03
왜 깃(git)을 사용할까?
내가 뭔가를 만들고 프로젝트를 진행하면,
컴퓨터의 특정 폴더에 작업물들을 넣어둔다.
git은 이 폴더 안에, 시간 여행이 가능한 "평행우주"들을 만드는 것이다.
시간여행이 가능하다는 건 내가 수습하기 어려운 실수들을 했거나,
전이랑 뭐가 바뀌었는지 헷갈릴때,
언제든 폴더 내 상태를 과거로 돌릴 수 있다는 것이다.
Ctrl+z와 같은 수준이 아니라, 아예 모든 파일들의 저장된 상태를 아까로, 엊그제로, 아니면 아예 맨 초기로
돌려 놓을 수 있다는 이야기이다.
또는 과거로 돌아가서 필요한 것만 챙겨서 현재나 다른 과거로 가져올 수도 있다. 🤗 (엄청난걸?)
예전 처럼 매번 폴더를 압축해서
시점별로 저장해 둘 필요가 없다. (..나를 두고 하신말씀인가..?ㅋㅋㅋ)
평행우주를 만든다는 것은 무슨 말이냐면,
내가 뭔가를 만들다가 메인작업에서 해보기엔 조금 위험이 있는 실험적인 시도를 해보거나,
고객이 뭘 좋아할지 몰라서 다른 버전으로도 sw를 작업해보고 싶을때,
깃이 없을 땐 각각 따로 저장해서 작업해야했지만,
깃은 폴더 안에 여러 평행우주를 생성해서 여기선 이버전, 저기선 저 버전
자유자재로 넘나들며 작업하다가 저쪽에서 작업하던 실험적 기능이 마음에 들면,
이 쪽 우주로 가져오고 하는 것을 할 수 있다!
깃 사용법
1. Command line Interface명령어입력 (CLI)
2. 소스트리
깃 사용전 준비물
1. Git
아래 사이트에 접속 후 다운받고 설치한다.
2. IDE 통합 개발 환경(Integrated Development Environment, IDE)
아톰, VSC, 등등...
VSC 다운로드
https://code.visualstudio.com/
1. git이 관리하는 폴더 만들기
1. 먼저 컴퓨터에서 원하는 위치에 프로젝트를 진행할 폴더를 만든다.
2. 그리고 이 코드를 VSC로 연다.
3. 필요한 파일들을 작성한다.
4. 이제 이 폴더를 Git이 관리하도록 해보자.
맥 => 터미널
윈도우 => CMD(명령 프롬프트)나 PowerShell 을 열고 폴더의 경로를 찾아 들어간다.
5. 하지만! 우리는 VSC에서 폴더를 열었으므로, VSC에서 직접 터미널로 바로 연결할 수 있다.
Ctrl + ` 를 눌러주면 하단에 터미널이 나오고 현재 폴더로 연결이 되어있다.
여기에 깃 명령어들을 쳐 볼 것이다.
6. git init을 입력해보자. 빈 git 저장소가 만들어졌다는 메시지가 뜰 것이다.
이 폴더가 깃의 관리하에 들어간 것이다.
그리고 아래의 명령어들을 사용해서 우리의 이름과 이메일을 등록해준다.
git config--global user.name"(내이름)" git config--golbal user.email"(내 메일주소)"
2. 현재 시점을 저장하기
1. git status 입력
타임캡슐에 묻으려면 타임캡슐에 먼저 담아야겠죠?
담을게 뭐가 있는지 git의 눈으로 살펴보자.
'git status'를 입력해보자.
아직 담기지 않은 파일들이 보인다.
untracked git에서 아직 쳐다보지 않는다는 뜻이다.
그리고 이 항목들은 정확히는 이 '파일'들이 아니라,
이 '파일들이 만들어졌다는 사실'들이다.
2. git add -A를 입력한다.
이 곳의 모든걸 git의 타임캡슐에 넣는다는 의미이다.
그럼 이제 묻어보자.
3. git commit -m "First Commit"
캡슐에 묻을 때는 이게 무슨캡슐인지 설명을 꽂아놔야 쓸데없는 삽질을 안한다.
-m을 붙이고 그 뒤에 설명을 적는다.
자, 첫번째 타임캡슐이 묻혔다.
git status로 확인해보면 이미 git에 담아두어서 묻어둘게 더이상 없다고 나온다.
4. 새 파일을 또 만들어 보자 그리고 git status를 눌러보자.
그러면 묻지 않은 파일이 뜰 것이다.
5. 여기에 다시 git add -A, git commit -m "add file" 이라 해보자.
그럼 이제 캡슐파면 add dog만 나오는게 아니라 고구마 줄기처럼 다 딸려서 나온다.
이제 좀 더 다양한 변화를 주어보자.
1. 한 파일은 삭제를 하고, 다른 파일은 내용을 수정해보자. 그리고 새로운 파일을 하나 더 만들어보자.
2. git status를 다시 해본다.
새로운 파일이 생성됬다는 사실, 한 파일이 삭제된 사실, 그리고 한 파일이 수정된 사실이 모두 나와있다.
3. 이 변화들 역시 같은 방식으로 캡슐에 담아서 commit으로 묻어보자.
4. git log 를 쳐서 이제까지 묻은 캡슐들을 한번 쭉 보자.
이렇게 캡슐의 정보와 메시지들이 출력된다.
만약, 터미널에서 이렇게 , 맨 아래에 기존의 입력 줄이 안뜨고, 글자도 안쳐진다면
VI 에디터라는게 실행되는 중인거니까 :q 를 눌러서 빠져나오면 된다.
3.1 과거로 돌아가기 -reset
이전의 묻었던 캡슐을 파내서 과거의 상태로 돌아가보자.
이 방법에는 1) 과감한 방법 2) 신중한 방법이 있다.
과감한 방법은 돌아갈 과거 이후 행적은 복원할 여지 없이 완전히 지우겠다는 것이다.
아까 git log로 확인한 타임캡슐 중 아래 표시한 파일로 돌아간다고 해보자.
그러면 위와 같이 해당 파일 일련번호의 앞 여섯자리만 복사한 다음
1. git reset 3d778d --hard 라고 입력한다.
그러면 HEAD is now at 3d778d3 add moneky 라며 현재 이 시점에 와 있다는 메시지가 뜨고
파일들을 보면 수정되어 있는 상태로 되돌아져 있다는 걸 볼 수 있다.
정말 기똥차균 기래 😏
그러나 이건 좀 과격한 방법이어서 reset 이전 상태로 다시 돌아갈 수는 없다.
3.2 과거로 돌아가기 - Revert
아까 과격한 방법보단 조금 소심하게,
미래에 한 발을 걸치고 과거로 가는 방법을 써보자. reset이 아닌 revert이다.
이번에는 돌아갈 시점이 아닌, 취소할 시점을 찾는다.
가장 최근 껄 골라보자.
1. git revert 일련번호6자리 입력!
그러면 이렇게 새 커밋 메시지를 작성하는 화면이 뜬다.
2. '그대로 저장하겠다' 는 (vi 명령어) :wq를 입력해준다.
아까 reset했을 때와 마찬가지로 파일들이 과거상태로 돌아와 있다.
그런데 git log 로 확인해보면 reset처럼 이 시점 이후가 지워진게 아니라 , 이 뒤에 새 캡슐이 묻힌걸 볼 수 있다.
시간을 정복했으니, 이제 평행우주로 가보자.
4. 평행우주 넘나들기 - Branch
회사에서는 위와 같은 방법으로 동물들을 관리한다면,
나는 뭔가 다른 시도를 좀 해보고 싶을 수 있다.
그렇다고 회사 파일들을 함부로 변경할 순 없다.
그럴 때 다른 평행우주를 만들어 넘어가는 것이다.
1. git branch 를 입력하고 my-idea 라는 평행우주, branch를 만들어보자 .
git branch my-idea
branch는 가지라는 뜻으로, 현 시점에서 두 미래로 분기하겠다는 의미이다.
2. 다시 git branch를 입력해보면 기존 branch인 master, 그리고 새로 만든 my-idea가 있다.
3. my-idea, 이 우주로 넘어가려면 git checkout my-idea 를 입력하면 된다.
아직은 아무 변화가 없다. 새로 만들어지는 branch는 원 branch의 현 상태를 그대로 가져가기 때문이다.
4. 그럼 이 평행우주에서 나만의 작업을 해보자. 그리고 캡슐에 넣어서 묻어주자.
한참 작업하고 있는데 상사가 들어와서, "프로젝트 어떻게 되가?" 묻는다. 🙄
당황하지 말고, 원래 우주로 돌아가보자.
5. git checkout master(이동할 우주이름) 을 입력해준다.
그러면 감쪽같이 이전 상태로 돌아왔다.
6. 그럼 마스터에서 또다른 branch를 낼 수 있을까?
다른 파일을 또 수정해보고 캡슐에 넣어 묻어주자.
자, 그럼 이제 이 3branch를 자유럽게 돌아다닐 수 있다.
7. 그럼 다시 상사가 난입한 상황으로 돌아가보자.
" 그 A 파일 말인데, B보다는 C가 낫지 않겠어?"
"네 알겠습니다. 그러면 그렇게 커밋을 하구요, 제가 따로 수정해본 E안이 있는데요, 그 중에 g-1파일은 기존의 g파일보다 괜찮은 것 같아서요."
"맘에 드네. 그럼 메인프로젝트에 적용하기로 하지"
5.1 다른 우주에서 가져오기 - Merge
자, 이 두 평행우주(my-idea, my-another-idea) 에서 일어난 변화를 master브랜치로 가져와야 한다.
my-idea의 변화가 my-another-idea가 생성될때도 반영되었던거니까
나중 브랜치인 my-another-idea만 가져오면 될것이다.
1. 먼저 master 브랜치로 돌아온다. ( git checkout master)
2. git merge 다음에 변화를 가져올 branch 이름을 적는다. git merch my-another-idea
그리고 엔터를 누르면 윈도우에서는 보통 바로 적용되지만,
맥 등에서는 커밋메시지를 작성하는 vi화면이 나오는데
맨 위에 적힌 것 그대로 쓰도록 저장하고 나가기, :wq 을 입력해준다.
그러면 상사의 지시대로 변경 뿐 아니라 다른 평행 우주들에서 작업한 내역까지 모두 적용된 상태가 됨.
3. git log --graph --all --decorate 를 쳐보면 시각화된 두 분기에서의 작업내역을 볼 수 있다.
그. 러. 나. 이 merge가 언제나 아름답게 이루어지지만은 않는다.
만약 branch1과 branch3이 서로 같은 파일을 다르게 수정했는데 병합을 하려고 한다면,
conflict 이 둘 간에 갈등, 충돌이 있다고 뜬다. 그러면서 git이 아까와 다르게 자동 add를 거부한다.
그럴땐, 이 둘중 하나를 택일해서 지우고, git add -A git commit 까지만 작성해준다.
이렇게 수정할 수는 있지만, 작업량이 커질 경우에는 꽤나 어려운 일이 되므로..
협업할 때는 가능한 다른 브랜치들이 같은 파일을 수정하는 일은 피해주는 것이 좋다.
5.2 다른 우주에서 가져오기 - Rebase
실제 프로젝트를 하면 합치고, 분기하고 합치고 여러 갈래로 나뉘는경우가 많다.
이럴때 '모든 변경 내용들이 한줄로 딱 깔끔하게 정리 되었으면 좋겠다' 싶을 때 merge대신 rebase를 쓴다.
1. git rebase my-another-idea
프로젝트의 성격이나 팀의 성향에 따라 merge나 rebase 중 적절한 것을 선택해서 사용하면 된다.
다 쓴 branch 삭제하기
1. git branch -D (브랜치명)
git branch -D my-another-idea
시간이 걸리더라도 한번쯤은 꼭 읽어보자.
출처 : https://www.youtube.com/watch?v=FXDjmsiv8fI
'about front-end' 카테고리의 다른 글
[자료구조] 개요 (0) 2020.07.06 How the web works? 웹은 어떻게 동작하는가. (0) 2020.07.04 프론트엔드개발자 면접질문 2020. (html편) (0) 2020.04.06 프론트엔드 개발자라면 꼭 알아야할 '무료'사이트 (닥코) (0) 2020.04.02 Github Desktop (0) 2020.03.30