본문 바로가기

반응형

개발👩‍💻/git

(8)
git: stashing과 cleaning stashing 하나의 브랜치에서 작업하던 내용을 commit하지 않고 임시저장해두어야 할 때사용한다 이렇게 하면 해당 브랜치의 working directory를 clean한 상태로 정리할 수 있다. $ git stashing push # 작업 중인 내용을 임시 저장 $ git stashing list # 임시 저장 중인 내용 보기 $ git stashing apply # 임시 저장했던 내용을 다시 복원한다. $ git stashing apply --index # 임시 저장했던 내용을 staged 상태까지 복원 $ git stashing drop # 해당 stashing 삭제 $ git stashing pop # 임시 저장했던 내용을 복원하고 stash 삭제 cleaning working director..
git: 로그 상대 참조 (^, ~) 로그를 일일히 찾아 입력하는 불편함을 줄여주기 위해 상대 참조 연산자를 통해 접근한다. ~ (틸드)와 ^(캐럿)을 통해 접근할 수 있다. HEAD(현재 가리키고 있는 로그 위치)로 할수도 있고, 특정 브랜치로 할 수도 있다. ~와 ^의 차이 둘 다 부모로 접근한다는 개념은 같으나 사용하는 곳이 다르다 예를들어 HEAD^와 HEAD~는 둘다 현재 HEAD가 가리키고 있는 로그에서 앞단계(부모)를 이동하는 것이다. 그러나 사용하는 방법에 따라 둘의 차이가 있는데, HEAD^2: 어떤 브랜치를 선택할래? tree-way merge한 브랜치에서 그 전 브랜치로 이동할 때 사용된다. 첫번째 부모는 main이고, 두번째부모는 main에 Merge된 다른 branch이다. 그래서 결국 HEAD^는 main브랜치 co..
git: tracking branch & upstream branch tracking branch & upstream branch tracking branch는 remote branch를 추적하는 local branch이다. (local branch와 remote branch의 history는 서로 독립적이다) 예를 들어 $ git fetch origin fetch 명령어를 사용해서 remote branch들을 최신 상태로 update를 한다면, remote branch들은 / 형태로 Local에 업데이트 되는데, 이런 형태의 branch들은 직접 수정할 수 없다. 이 remote branch들을 local에서 사용, 수정할 수 있도록 해주는 것이 tracking branch이다. tracking branch는 Local에서 원격 브랜치를 tracking할 수 있는 bra..
git: gitignore 파일 규칙 *.[oa] # .o와 .a로 끝나는 모든 파일 *~ # ~로 끝나느 모든 파일 !lib.o # 모든 .o 파일은 무시한다고 했지만 !를 사용하는 lib.o 파일은 무시하지 않음 /TODO # 현재 디렉토리에 있는 TODO 파일만 무시 build/ # build dir에 있는 모든 파일 무시 # build 아래 하위 디렉토리도 포함 doc/**/*.pdf # doc아래 하위 dir 포함해서 .pdf 확장자 모두 무시
git: rebase 심화 (rebase --onto: branch 부모의 부모에 대한 rebase) branch가 한 줄기만 있다면 # feature branch에서 $ git rebase 위 명령어만 적으면 rebase할 수 있다. 그렇다면 해당 브랜치의 부모브랜치의 부모브랜치, 즉 1번의 브랜치를 거쳐 rebase는 어떻게 할까? 위 그림과 같은 상황에서 client를 main 브랜치로 rebase를 해야한다고 하면, 아래 그림과 같이 client만 main 브랜치 커밋들 옆에 붙어야 한다. 이렇게 하기위해선 $ git rebase --onto main server # rebase --onto 위 명령어를 통해서 rebase할 수 있다. 그 후 main branch와 client branch를 fast-forward로 merge하면 된다. 마지막 server도 main branch로 rebase하고..
git: branch와 status관련 명령어 (branch, switch, diff, rm, restore, reset) branch & switch $ git branch # 새로운 branch 생성 $ git branch -d # branch delete $ git branch -v # branch list + latest commit $ git branch --merged # merged branch list $ git branch --no-merged # no-merged branch list # 여기 있는 branch들은 삭제할 수 없다 $ git switch # 기존 branch로 이동 $ git switch -c # branch 생성하고 이동 $ git switch - # 이전 branch로 이동 $ git branch -vv # local branch들 목록 + 내용 + 안정된 브랜치일 수록 커밋이 뒤쳐짐 브..
git 이란? git 의 flow와 file lifecycle
git merge와 rebase의 차이: rebase의 이해 처음 rebase를 들었을 땐 어떻게 동작하는 것인지 이해가 잘 안됐다. 그래서 merge와 rebase의 차이가 무엇인지도 몰랐었음.. Merge와 rebase의 차이 Merge: branch를 통합하는 명령어 Rebase: branch의 base를 옮기는 명령어 위와 같이 차이점을 말해 볼 수 있다. 즉, branch를 통합하는 방법은 2가지이다. Merge만 한다 Rebase를 한 후 Merge를 한다 Merge $ git switch main # 메인 브랜치에서 $ git merge # 다른 브랜치와 병합 Rebase를 하는 이유는, merge를 하는 방법을 먼저 보면 이해하기 쉽다. Merge하는 방법에는 2가지가 있다. fast-forward 3-way merge (merge를 하는 곳(브랜치..