목록git (11)
취미가 좋다
git fetch 원격 저장소에는 있고 로컬 저장소에 없는 커밋을 다운로드 한다. 원격 브랜치들이 가리키는 곳들을 업데이트한다. => 즉, 원격 저장소의 상태를 로컬에 있는 원격 브랜치들에 반영한다. => 로컬 저장소의 상태(브랜치)를 변경하진 않는다. git fetch - 원격 저장소에서 데이터를 가져오는 명령어다. - 왼쪽의 상태에서 오른쪽 상태가 된다. - 커밋 C2, C3 를 로컬 저장소로 다운로드하고 o/main 브랜치를 업데이트한다. git pull git fetch 후 원격 브랜치와 로컬 브랜치들의 merge 까지 진행하는 명령 git fetch git merge o/main 위 과정은 pull 명령어와 동일하다. git pull
git 원격 저장소 / 브랜치 git 을 사용할 때는 github 와 같은 원격 저장소를 주로 사용한다. 장점 1 : 백업의 역할을 한다. 로컬에서 코드가 실수로 삭제되어도 원격 저장소에 저장되어있다. 장점 2 : 공동 작업, 공유의 역할을 한다. 여러 명이 동시에 프로젝트를 하거나 코드를 공유할 때 유용하다. 로컬에서 원격 브랜치는 / 으로 표현된다. git 은 원격 저장소를 clone 해 오면 원격 저장소의 이름을 자동으로 origin 으로 설정한다. 특징 HEAD 는 origin 브랜치를 가리킬 수 없다. git 원격 작업들은 두 저장소 간의 데이터를 주고 받는 행위다.
git tag - 깃의 branch 는 유동적으로 커밋을 가리킨다. - 중요한 커밋을 영구적으로 가리키기 위해서는 태그를 사용할 수 있다. git tag v1 C1 - "v1" 이라는 이름의 태그를 C1 커밋에 붙였다. - 커밋 이름을 지정하지 않으면 현재 HEAD 가 가리키는 커밋에 태그가 생성된다. - 만약 생성한 v1 태그로 switch / checkout 을 하게 되면 HEAD 가 분리되어 커밋에 붙는다. - 태그 자체에 HEAD 가 붙을 수는 없다. https://learngitbranching.js.org/?locale=ko Learn Git Branching An interactive Git visualization tool to educate and challenge! learngitbra..
git cherry-pick 현재 브랜치에서 필요한 커밋들을 가져와서 뒤로 붙인다. - 왼쪽 main 에서 c2, c4 커밋을 가져와서 붙이려고 한다. - rebase 와 비슷한 방법으로 붙는다. - 충돌이 날 수 있다. git cherry-pick c2 c4 (main 에서 c4 를 체리픽 했을 때 충돌을 보면 c4 만의 변경 사항을 가져오는 것이 아니라 현재 브랜치와 c4 브랜치와 차이를 비교하는 것 같다.) 그러나 실제로 테스트를 해봤을 때는 충돌이 발생한다. 예를 들어 c2, c3, c4 가 아래와 같이 수정 변화를 가지고 있다고 하자. (1) 충돌이 발생하는 경우 : c2, c3, c4 가 같은 곳을 수정했을 때 // c2 a // c3 a b // c4 a b c (2) 충돌이 발생하지 않는 ..
HEAD 현재 작업중인 커밋을 가리킨다. 커밋을 직접 가리킬 수도 있지만 일반적으로 커밋을 가리키는 브랜치를 가리킨다. HEAD → main → c1 - HEAD 는 * 표시로 표현된다. - 현재 HEAD 는 main 브랜치를 가리킨다. - 현재 main 브랜치는 c1 커밋을 가리킨다. git checkout c1 or git switch c1 HEAD → c1 main → c1 - HEAD 가 브랜치가 아니라 커밋을 직접 가리키도록 분리됐다. HEAD 이동 - HEAD 를 옮기기 위해서는 캐럿(^) 과 틸드(~) 를 사용한다. - 이를 상대 참조 라고 한다. - 커밋의 해시를 직접 작성하기엔 어렵기 때문에 많이 사용한다. - switch 나 checkout 명령어를 사용하면 된다. (둘의 차이는 나중에..
git rebase git merge 와 같이 두 커밋을 합치는 작업이다. git rebase 는 커밋들을 한 줄로 깔끔하게 만들고 커밋의 순서를 만들어준다는 특징이 있다. 아래 예시를 보며 쉽게 이해해보자. - 왼쪽처럼 c2, c3 커밋을 각각 가리키는 bugFix, main 브랜치가 있다고 하자. - 현재 가리키고 있는 브랜치는 bugFix 이다. - git rebase 명령어로 2개를 합쳐보자. git rebase main - main 과 bugFix 는 따로 작업했지만 순서대로 작업한 것처럼 보이게 된다. - 기존에 있던 c3 커밋은 없어지지 않았지만 가리키는 브랜치가 없어서 흐릿해진 상황이다. - 같은 방법으로 main 을 c3' 커밋으로 옮겨보자. git switch main git rebas..