목록개발 기타 (20)
취미가 좋다
문제 상황 - 로컬 : C1 에서 작업해서 C3 커밋을 푸시하고 싶다. - 원격 : C1 뒤에 누가 C2 커밋을 푸시했다. - 따라서 현재 C3 가 push 되지 않는 상황 - 로컬로 C2 를 가져와서 merge/rebase 한 후 push 해야 한다. rebase 후 push // 1번 방법 git pull --rebase git push // 2번 방법 git fetch git rebase o/main git push merge 후 push // 1번 방법 git pull git push // 2번 방법 git fetch git merge o/main git push
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) 충돌이 발생하지 않는 ..
git reset 브랜치를 지정한 커밋으로 이동한다. 지정한 커밋은 부모쪽 커밋일수도 자식쪽 커밋일수도 있다. 옵션 - hard : 돌아가려는 커밋 이후의 모든 내용들이 사라진다. - soft : 돌아가려는 커밋으로 돌아가고 이후의 모든 내용들이 stage 상태로 남아있다. (git add 된 상태) 커밋을 다시 할 수 있는 상태 - mixed : 돌아가려는 커밋으로 돌아가고 이후의 모든 내용들이 unstage 상태로 남아있다. (git add 이전 상태) (default) (hard 옵션은 git branch -f main main~1 와 같은 것 같다.) (hard 옵션은 변경사항 다 무시하고 해당 브랜치, 커밋으로 이동시킨다.) git reset main~1 git reset main^ git re..