Util
Git (생활코딩)
Ju_Hyang
2020. 5. 18. 23:01
git 의 3대 목적
-
version
-
backup
-
collaborate
git의 첫번째 목적
-
Version
-
작업을 진행하다보면 여러가지 파일들이 생성 된다.
-
일반적으로 작업을 나눌 경우 ‘다른 이름으로 저장’을 통해 작업을 나눈다.
-
이 경우에 언제 작업했는지, 어떤 작업을 했는지 기록하기가 힘들다 !
-
Backup
-
파일에 관해 불확실한 것 ? 언제 소실될지 모른다
-
파일에 관해 확실한 것 ? 언젠가는 꼭 소실된다.
-
이 소실되는 것을 방지해서 backup을 해야한다 !
-
지역저장소 —> 원격저장소 :: Push
-
원격저장소 —> 지역저장소 :: Pull
-
Collaborate
-
backup 을 하면 협업을 하는 것이나 다름 없다.
-
유저 1이 원격저장소에 Push를 하게되면, 다른 유저 2는 Pull 을 하여 이어서 작업하고 다시 원격저장소에 Push를 한다.
Git의 종류
-
Github.com 의 Github Desktop
-
TortoiseGit :: Windows 전용, Windows 탐색기에 기생.
-
Sourcetree :: 복잡하지만 자유롭다.
-
git
Git Command Line Interface
-
GIT 을 terminal 에서 사용하는 방법을 익힌다.
-
git config —global user.email “EMAIL"
-
git config —global user.name “USER_NAME"
-
사용자에 대한 정보를 입력 !
-
git 초기화
-
git init . :: 현재 디렉토리를 git으로 관리하겠다고 초기화 하는 명령어 이다. (Initialize repository)
-
이 결과 .git 폴더가 생성되고 버전 관리에 대한 정보가 저장이 된다. 이 디렉토리를 지울 경우 버전관리가 사라지게 된다.
-
버전 생성
-
Working tree :: 수정한 파일들 / Staging Area :: 버전을 만들려고 하는 파일들 // Repository :: 버전이 만들어져 있는 파일들
-
git status :: git 의 현재 상태를 화면에 출력시킨다.
-
commit == version
-
git add {file} :: file 을 Staging Area 에 올린다. (버전 관리를 하기 위해서)
-
git commit :: 실행시 에디터가 실행된다
-
-m “COMMIT_MESSAGE” :: 옵션을 사용하여 에디터 없이 바로 메시지를 생성하면서 버전생성을 하고 이는 Repository로 들어간다.
-
git log :: 현재까지의 모든 version에 대한 설명을 출력한다.
-
—stat :: 버전에 관련되어 있는 파일들을 함께 출력한다.
-
버전간의 차이점 비교
-
git diff :: 변경사항을 출력한다.
-
git reset —hard :: 마지막 커밋으로 돌아간다 ! 현재의 변경사항을 초기화
-
git log -p :: 각 커밋의 변경 내용과 함께 log가 출력 된다.
-
이전 버전으로 이동
-
git checkout {COMMIT_ID} ::COMMIT_ID 의 버전으로 현재 코드를 이동 시킨다. (HEAD의 이동)
-
git checkout master :: 최신의 버전으로 돌아감
-
보충
-
git add {DIRECTORY} :: 디렉토리 전체에 있는 파일들을 add 한다.
-
git add -am “COMMIT_MESSAGE” :: git add . + git commit -m 의 역할을 한다. 단, 새로 생긴 파일에는 add가 되지 않고 한번이라도 add된 파일에만 작동이 된다.
-
git commit :: 옵션 없이 실행 할 경우 기본 에디터가 실행이 되고, 여러줄의 커밋 메시지를 남길 수 있다.
-
git config —global core.editor “EDITOR” :: 위에서 실행되는 기본 에디터를 바꿀 수 있다.
-
버전 삭제
-
git reset —hard {COMMIT_D} :: COMMIT_ID 로 버전으로 reset하고 그 뒤의 커밋들을 모두 삭제 시킨다.
-
주의사항 :: 공유되기 전 버전까지만 reset을 진행해야 한다.
-
버전 되돌리기
-
git revert {COMMIT_ID} :: 해당 commit 을 취소 시키면서 새로운 버전을 생성한다. (COMMIT_ID 의 이전상태로 바뀐다)
-
충돌을 막기 위해서 각 commit의 역순으로 하나씩 가야한다.
-
COMMIT_ID 에서 변경된 사항만 변경을 시키기 떄문에 한꺼번에 여러가지 commit을 뛰어 넘을 때 충돌이 일어나게 된다. (conflict)
GIT 3 - Branch Conflict CLI
-
Branch
-
git log —all —graph —oneline :: branch 에 대한 정보를 그래프 / 한줄로 표현
-
git branch :: branch 목록 출력
-
git branch {BRANCH_NAME} :: branch 생성
-
HEAD는 현재 어느 branch에 있는 지에 대한 정보를 알려준다.
-
git checkout {BRAHCN_NAME} :: brahcn 전환(이동)
-
Merge (병합)
-
base :: 합치려고 하는 것의 공통의 조상
-
merge commit :: 합쳐진 것의 결과물
-
git commit —amend :: commit 메시지 수정
-
git merge {BRANCH_NAME} :: BRANCH_NAME 을 현재 HEAD에 병합한다.
-
conflict 오류 시 해당 파일 수정 후 다시 add 후 git commit 실행하면 merge가 실행된다.
-
Conflict (충돌) - 3 Way Merge
-
here :: A H C H
-
base ( 원본 ) :: A B C D
-
there :: A B T T
-
here + there
-
2 Way Merge :: A ( B / H ) ( C / T ) ( H / T ) Conflict
-
base + here + there
-
3 Way Merge :: A H<from here> T <from there> (H / D / T)
-
수정된 branch 의 내용을 가져와서 병합한다
-
외부 도구를 이용한 병합
-
here :: A H C H
-
base ( 원본 ) :: A B C D
-
there :: A B T T
-
here 에서 git checkout there 실행 시 마지막 부분에서 conflict가 발생.
-
p4Merge 라는 도구를 이용하면 쉽게 Merge 를 할 수 있다.
-
실행법 :: git mergetool
GIT 4 - cherry-pick & rebase
-
cherry-pick :: 특정한 commit의 변화 내용만 골라와서 뒤에 붙이는 기능
-
rebase :: 병렬적인 commit 트리를 직렬형으로 변경하여 로그에 직관성을 높인다.
-
두 가지 모두 commit 들의 순서와 배치re를 바꿀 수 있도록 해준다.
-
Cherry-pick의 개념과 기본 사용법
-
git cherry-pick {COMMIT_ID} :: COMMIT_ID 의 스냅샷이 아닌 변화 내용만 가지고와서 현재의 branch 뒤에 붙여서 새로운 commit 으로 만든다.
-
rebase 의 개념과 기본 사용법
-
base를 재배치하여 병렬적인 branch의 구조를 선형으로 바꾸도록 한다.
-
git rebase {BRANCH_NAME} :: 현재 branch 의 base 를 BRANCH_NAME 의 마지막 commit 으로 바뀐다. 이때 BRANCH_NAME 에서 하나 작업들은 남아있다.
-
rebase 는 원격 저장소에 push 하기 전에 실행 되어야 한다.
-
merge 의 결과와 rebase 의 결과는 서로 같아야 한다.
ㅇㅇㅇ