git branch --all : 원격 저장소와 연결된 모든 브랜치를 보여준다.
git branch -d 브랜치명 : 해당 브랜치 삭제
git branch --move 이전이름 나중이름 : 브랜치명 변경
이전 커밋과의 충돌 없이 그냥 merge될 수 있는 merge로, 커밋을 남기지 않는다.
merge 했다는 커밋을 남기고 싶다면 git merge --no-ff "merge할 브랜치"를 사용한다.
master 브랜치가 d에 있을 때, f와 그냥 merge 해버리면 fast-forward merge가 되지만, g를 잃어버리게 된다. 따라서 g와 f를 merge해야 하는데, 이때, three-way merge라 하고 커밋을 남겨야 한다.
- git merge merge할 브랜치
- 1에서 충돌 나면 일단 git status 해서 상태 확인.
- 2에서 확인해서 충돌난 파일을 열어서 수정.
- merge 취소할거면 git merge --abort
- merge 할거면 git add 수정한 파일
- git merge --continue 하고 커밋 메세지 작성.
git config --global -e를 통해 config를 edit옵션으로 열어서
[merge] tool = vscode [mergetool "vscode"] cmd = code --wait $MERGED
를 입력하여 merge를 할 때, vsc를 사용할 수 있도록 세팅한다.
1. git merge merge할 브랜치
2. 1에서 충돌 나면 일단 git status 해서 상태 확인.
3. git mergetool 하면 vsc로 이동
4. 다 수정하고 나면 .orig란 파일이 생기는데, 이거는 merge를 완벽히 수행하기 전의 파일인데, 이거 없애고 싶으면 git config --global mergetool.keepBackup false를 해주면 된다.
5. git add 수정한 파일
6. git merge --continue 하고 커밋 메세지 작성.
위와 같은 상황에서 g와 f를 merge하려면 충돌이 나는데, 이를 피하기 위해서 e의 부모를 g로 바꿔준다면(rebase) 충돌이 나지 않고 fast-forward merge가 가능하다.
로컬 환경에서 작업하거나, 브랜치에서 나 혼자만 작업한다면 매우 유용하게 사용할 수 있다. 한 브랜치에서 동시에 같이 작업한다면 사용하지 않는게 좋다.
이 상태에서 feature-b와 master를 fast-forward merge 하기 위해서는 feature-b를 master로 rebase 해준 후 master에서 feature-b를 merge하면 된다.
1. head를 feature-b로 이동시킨다.
2. git rebase master
3. rebase 한 후 상태
4. head를 master로 이동시킨다.
5. merge한다.
이 상황에서 UI를 d로 rebase하고 싶다면?
이 상태에서 profile-ui 브랜치는 profile 브랜치에서 파생된 브랜치이다. 그런데, 이제 profile-ui 브랜치를 master과 충돌 없이 merge하고 싶다면, profile-ui를 master에서 파생된 것으로 rebase해주면 된다. 이 때,
git rebase --onto master profile profile-ui (master에 profile에 파생된 profile-ui를 rebase하라) 를 하면
이렇게 된다.