본문 바로가기
공부/기타

git 명령어 배우는 사이트

by happyeuni 2020. 9. 14.

https://learngitbranching.js.org/?locale=ko

 

Learn Git Branching

An interactive Git visualization tool to educate and challenge!

learngitbranching.js.org

이 사이트에서 git에 대해 좀 더 이해할 수 있습니다. 설명도 잘 되있구요 

 

git branch [브랜치명] : 하나의 커밋과 그 부모 커밋들을 포함하는 작업 내역

git checkout [브랜치명] : 브랜치로 

merge : 두 개의 부모를 가리키는 커밋 생성 ( 부모들과 부모들의 부모들의 모든 작업 내역포함)

       ex. git merge bugFix (master를 가리키고 있을 때 bugFix브랜치를 master브랜치와 합치기)

rebase : 기본적으로 커밋들을 모아서 복사한 뒤, 다른 곳에 떨궈 놓는 것. 리베이스를 하면 커밋들의 흐름        을 보기 좋게 한 줄로 만들 수 있다는 장점. 하위의 것을 rebase 하면 상위의 것도 같이 됨

      단점 : rebase하면 커밋트리의 보이는 히스토리 수정

      -i 옵션 : 인터렉티브 리베이스.

                 리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 UI를 띄움(해시와 메시지도)

      ex, git rebase master bugFix ( bugFix를 master 아래로 복사)

git log : 해시 확인(

 

HEAD : 현재 체크아웃된(=작업중인) 커밋 가리킴

HEAD 분리 : HEAD를 브랜치 대신 커밋에 붙이는 것

상대 참조를 이용하여 브랜치나 head에서 출발하여 다른 지점으로 이동 가능

  (부모커밋을 체크아웃해서 head분리 먼저 해야함)

  ^ : 한 번에 한 커밋 위로 이동 (master^ : master의 부모, master^^ : master 조부모)

      ex. git checkout master^

  ~<num> : 한번에 여러 커밋 위로 올라감

      ex. git checkout HEAD~4

      ex2. git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2

         = git checkout HEAD~^2~2

 -f 옵션 : 브랜치를 특정 커밋으로 옮기기 

      ex. git branch -f master HEAD~3 (=master 브랜치를 HEAD에서 3번 뒤로 옮기기)

 

reset : 브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경 내용을 되돌린다.(애초에 커밋하지 않은 것 처럼)

    ex.git reset HEAD~1

revert : 내용을 되돌리고 되돌린 내용을 다른 사람들과 공유하기 위해서 사용

  (되돌리려(없애려) 한 커밋아래에 새로운 커밋 생김)

   ex. git revert HEAD

 

checrry-pick : 현재 위치(HEAD) 아래에 있는 일련의 커밋들에대한 복사본을 만들겠다는 것

  • git cherry-pick <Commit1> <Commit2> <...>
  • ex. git cherry-pick c2 c4 (현재 작업중인 것 아래에 c2, c4 복사)

불필요한 코드를 포함하지 않고 브랜치를 master에 합치려면?

  •  git rebase -i
  •  git cherry-pick

 

milestone : 커밋을 표시할 브랜치보다 영구적인 git 태그 방법

  • ex. git tag v1 c1  ( v1이 태그이름 c1은 커밋이름)

describe : 태그를 기준 상대적인 위치 묘사해주는 명령어  git describe <ref>

  • git describe <ref>
  • <tag>_<numCommits>_g<hash>
  •      tag : 가장 가까운 부모태그, numCommits : 그 태그가 몇 커밋 멀리있는지, hash : 묘사하고 있는 커밋의 해시  

 

bisect : 문제가 되는 커밋을 찾는 명령어

 

 

 

 

 

* clone : 원격저장소의 복사본을 local에 생성

* 원격 브랜치를 보통 origin/master 로 표현 ( remotename / branchname)

 - 원격 브랜치는 가장 최근 원격 저장소와 작업했을 때를 기준으로 원격 저장소의 상태를 반영하기만 함

* fetch : 원격저장소에 있지만 로컬에 없는 커밋을 다운로드하고 원격브랜치가 가리키는 곳을 업데이트

           로컬의 상태는 전혀 변하지 않음!!!

* pull : fetch로 로컬에 데이터를 내려받은 후 작업을 업데이트하여 변경 반영

  • = git fetch; git merge o/master

* fakeTeamwork : 원격 마스터에 하나의 커밋을 하는 것

  • ex. git fakeTeamwork 
  • ex2. git fake Teamwork foo 3 : 원격저장소의 foo브랜치에 3개의 커밋 push 

* push : 원격저장소에 업로드하고 새 커밋을 합치고 갱신하게 함

  • git push <remote><place>
  • git push origin <source>:<destination>

 

 

* 히스토리가 엇갈려 push가 안될 때

  • git fetch; git rebase o/master; git push
  • = git fetch; git merge o/master; git push
  • = git pull --rebase; git push

* 원격저장소의 master는 보통 잠겨있음

 로컬의 master에서 커밋 후 push하면 오류 -> pull request

 

 

 

 

* null을 push하면 그 장소의 브랜치가 삭제됨

 ex. git push origin :foo

* nothing을 fetch하면 새 브랜치 생성

 ex. git fetch origin :bar

 

 

 

 

 

 

 

 

 

 

 

답↓

[메인]

<git 기본>

1. git 커밋 소개 

 git commit

 git commit

2.git에서 브랜치쓰기 

 git branch bugFix

 git checkout bugFix

3.git에서 브랜치 합치기

 git branch bugFix

 git checkout bugFix

 git commit 

 git checkout master

 git commit

 git merge bugFix 

4. 리베이스의 기본 

git branch bugFix

git checkout bugFix

git commit

git checkout master

git commit

git checkout bugFix

git rebase master

 

 

<다음 단계로>

1. HEAD 분리하기

 git checkout c4

2. 상대참조 ^

 git checkout bugFix^

3. 상대참조 #2(~)

 git branch -f master c6 (master를 c6로 옮기기)

 git checkout c1 ( HEAD를 c1으로 옮기기)

 git branch -f bugFix HEAD~1 (bugFix를 c0로 옮기기)

4. 작업 되돌리기

 git reset HEAD~1 

 git checkout pushed (pushed 가리키기)

 git revert HEAD(pushed 브랜치 revert)

 

<코드 여기저기로 옮겨다니기>

1. cherry-pick 소개

git cherry-pick c3 c4 c7(현재 작업중인 master* 아래에 c3 c4 c7 복사)

2. git 인터렉티브 리베이스

 git rebase -i HEAD~4 (창이 뜨면 위치 조정, 삭제하고싶은거 삭제하고 rebase)

 

<종합선물세트>

1. 딱 한개의 커밋만 가져오기 

 git checkout master

 git cherry-pick c4

2.커밋들 갖고 놀기

 git rebase -i HEAD~2

 git commit --amend (바로 top에 있는 커밋 내용 정정할 때 사용)

 git rebase -i HEAD~2

 git branch -f master c3''

3.커밋 갖고 놀기 #2

 git checkout c1

 git cherry-pick c2

 git checkout mastser (커밋 이름으로 해도되고 브랜치이름으로 해도됨)

 git cherry-pick c2 c3

4.git 태그

 git tag v0 c1 (c1 커밋에 v0이라는 태그 붙이기)

 git tag v1 c2

 git checkout v1 ( 태그 이름으로도 체크아웃 가능)

5.git describe

 git commit

 

<고급문제>

1.9천번이 넘는 리베이스

 git rebase master bugFix

 git rebase bugFix side

 git rebase side another

 git rebase another master

 

2.다수의 부모

 git branch -f bugWork HEAD~^2~

3. 브랜치 스파게티

 git checkout one

 git cherry-pick c4 c3 c2 (git rebase -i one master 와 같음. cherr-pick에서 순서를 바꾸거나 없앨수도 있다)

 git checkout two

 git cherry-pick c5 c4 c3 c2 

 git branch -f three c2

 

[원격]

<push&pull -- GIT 원격 저장소>

1. Clone 소개

 git clone

2. 원격 브랜치

 git commit

 git checkout o/master (원격브랜치로 checkout 한 상태에서는)

 git commit  ( 커밋을해도 head만 넘어간다)

3. git Fetch

 git fetch

4. git pull

 git pull

5. 가짜 팀워크

 git clone

 git fakeTeamwork master 2

 git commit

 git pull

6. git push

 git commit

 git commit

 git push

7. 엇갈린 히스토리

 git clone

 git fakeTeamwork master(원격 c0-c1-c2)

 git commit (로컬 c0-c1-c3)

 git pull --rebase ( 원격의 c2 로컬로 rebase해서 pull)

 git push (원격에 반영)

8. 잠겨버린 master (?)

 git reset --hard o/master

 git checkout -b feature c2

 git push (origin feature)

 

<고급 git 원격 저장소>

1. push master

 git fetch (원격에 있는거 가져오기)

 git rebase o/master side1

 git rebase side1 side2 

 git rebase side2 side3

 git rebase side3 master

 git push

2. 원격 작업과 merge하기

 git checkout master

 git pull

 git merge side1

 git merge side2

 git merge side3

 git push

3. 원격저장소 추적하기

 git checkout -b side o/master (side브랜치가 o/master 추적하도록)

 git commit 

 git pull --rebase

 git push

4.git push의 인자들

 git push origin foo

 git push origin master

5. git push 인자 --확장판

6. Fetch의 인자들

 git fetch origin master^:foo

 git fetch origin foo:master

 git checkout foo

 git merge master 

7. Source가 없다

 git push origin :foo (origin원격 저장소의 foo에 null에 있는 값 push)(없으니까 foo 사라짐)

 git fetch origin :bar (origin원격 저장소nothing에서 bar로 push)(bar생성)

8. pull 인자들

 git pull origin bar:foo

 git pull origin master:side

댓글