Git

2 minute read

Git init .
현재 경로를 깃이 관리하도록 한다
(숨김파일로 .git디렉토리와 관리파일 생성)
->. 여기에 버전정보가 기록된다

YouTube

git init 디렉토리명
디렉토리 생성까지 해준다

버전은 세가지 상태가 있다.
아직 버전으로 만들어지기 전 단계를 working tree라고 한다.

그 중 버전관리할 일부파일만 올릴때 그 공간을.stage area라고한다.

그걸 git에올리는곳을.repository라고한다.

Git status
현재경로의 버전관리상태를 알수있다.
(Working tree에있는 파일들을 볼 수 있다. Untracked files에표시)

Git add [파일명] 혹은 [경로]
=>stage area로보내는것이다

git commit -m “message”
=> state area에있는 파일들을 커밋
(깃헙같은 원격저장소에 올리는건 아니다. 로컬의 저장소. 그건 푸시)

Git log => 버전을 보여준다

Git log —stat
Commit별로 연루된 파일을 볼 수 있다.

Git diff
=> show changes
마지막버전과 워킹트리와의 차이점 표시

Git reset —hard
워킹트리 리셋

Git log -p
버전별 diff 표시

Git ` [버전명]
해당 버전상태로 시간여행(?)
Git checkout master로 돌아갈수있다

Git commit -am “message”
=> a를붙이면 add포함한번에
(주의사항 => 한번도 커밋되지않은 파일은 추가안된다)

Git commit
=> 그냥 이거만치면 기본에디터가 열리고 여러줄의 커밋메시지 작성가능

Git reset [버전명]
=> 체크아웃과 달리 실제로 삭제하는것
(Revert랑차이가 뭐지? => 리버트는 기존이 삭제안되고 기존위에 리버트된게 추가)

Git revert 위에 셜명했음. 피포에서 쓰던 그 리버트 맞음. 기존꺼 위에 새로운 히스토리로 삭제
1,2,3,4 버전이 있을때 2로 가고싶으면
R4,r3 r2를 반영함(역순)

버전관리하고싶지 않은 파일은 .gitignore에추가한다.

git branch 브랜치명
브랜치를 생성한다

git checkout 브랜치명
해당 브랜치로 전환한다

git log —all —graph —oneline
all은 모든 브랜치 표시
graph는 그래프로 표시
oneline은 간편하게 표시

base는 브랜치들의 공통의 조상이다. 즉 갈라진 그 부분

commit한 이름을 바꾸고 싶으면
git commit —amend를치면 에디터가 열린다

git merge 마스터로합칠브랜치

conflict 발생시

git stutus를 쳐보면 충돌났다고 말해준다.

충돌부분을 깃이 표시해준다. 파일내에. 직접 수정해서
다시 add를 하면 된다.

그다음에 gitstatus를 해보면 해결됐다고 나온다.

그다음에 git commit까지만쳐도 머지가 된다.

Git 사용 중 자주 만나는 이슈 정리
git mergetool
충돌처리하는 전문툴 실행
보통 3way merge를 제공한다(창 3개 열리던 그거 - 셋(a,b,base)중 둘만 같다면 하나 수정된걸 적용) 대부분

GIT RESET [VERSION]
베이스를 해당버전으로 하고 수정사항은 삭제된다.

체크아웃은 브랜치를 바꾸는거라 볼 수 있지만 정확하게는 헤드가 가리키는곳을 변경하는거고 브랜치가 아니라 버전으로 할수도 있다.

git remote add [저장소 별명] https://주소.git
origin도 별명 중 하나지만 관습적으로 메인이 되는녀석을 origin이라 한다

git remote
원격저장소 출력
git remote -v
주소까지출력

git push origin master
=> origin이 원격저장소의 별명이고 master는 브랜치이

git pull === git fetch하고 git merge FETCH_HEAD
fetch는 수정사항생긴걸 그냥 가져만오는거고
merge로 head를 수정사항 받아온걸로 바꾸면 pull과 같아진

GERRIT => 코드리뷰 도구(바로 올라가는게 아니라 리뷰를 받아야하도록 구성가능)

git cherry-pick 수정번호

=> 다른 브랜치에서 작업하던 내용중 이거는 가져오면 좋겠늗데? 싶은것을 가져올 수 있는 내

base는 브랜치들의 가장 가까운 공통의 조상을 말하는데
리베이스는 그 베이스를 바꾸는것을 의미한다.

git rebase topic
topic 브랜치의 끝을 베이스로 하겠다

a-b-base - 1 - 2 - 3 (master)
= e = f (topic)

이게
a-b-base - e - f - 1 -2 -3 (master) 이렇게 되는것이

로컬에 있을때나 리베이스한다. 푸쉬하고나면 나중에 pull땡겨오고하면 지옥이다.
애초에 리베이스를 잘쓰지도 않는다.