브랜치와 병합
3. 코드 예제
예제 1: 브랜치 만들고 정리하기 — 01_branch_merge.sh 발췌
git branch temp
git branch
git branch -v
git branch -m temp old-name
git branch -d old-name
git branch throwaway
git switch -q throwaway
echo "throwaway 전용" > note.txt
git add note.txt
git commit -q -m "throwaway 커밋"
git switch -q main
git branch -D throwaway* main
temp
--- -v (마지막 커밋까지) ---
* main 4ac420f README 추가
temp 4ac420f README 추가
--- -m 이름 변경 후 ---
* main
old-name
Deleted branch old-name (was 4ac420f).
--- -D 강제 삭제 후 (병합 안 된 브랜치) ---
* maintemp 는 커밋이 없어 -d 로 바로 지워집니다. throwaway 는 커밋을 하나 추가했지만 main 에 합치지 않아 -d 대신 -D 가 필요했습니다.
예제 2: fast-forward 병합 — 01_branch_merge.sh 발췌
git switch -c feature/login
echo "login form" > login.txt
git add login.txt
git commit -q -m "로그인 폼 추가"
git switch -q main
git merge --ff-only feature/login
git log --oneline --graphUpdating 4ac420f..3d4d185
Fast-forward
login.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 login.txt
* 3d4d185 로그인 폼 추가
* 4ac420f README 추가
* cee23fd app.txt 추가main 에 새 커밋이 없어 병합 커밋 없이 포인터만 3d4d185 로 옮겨갔습니다. 로그가 갈라지지 않고 한 줄입니다.
예제 3: 3-way 병합 커밋 — 01_branch_merge.sh 발췌
git switch -c feature/report
echo "report v1" > report.txt
git add report.txt
git commit -q -m "리포트 초안"
git switch -q main
echo "빌드: mvn package" >> README.md
git add README.md
git commit -q -m "README 에 빌드 설명 추가"
git merge --no-ff -m "feature/report 병합" feature/report
git log --oneline --graph --all
git log -1 --format="%H %P" HEADMerge made by the 'ort' strategy.
report.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 report.txt
* 8292139 feature/report 병합
|\
| * 62ab09b 리포트 초안
* | 9188817 README 에 빌드 설명 추가
|/
* 3d4d185 로그인 폼 추가
* 4ac420f README 추가
* cee23fd app.txt 추가
--- 병합 커밋의 부모 두 개 ---
82921396f54dc55cdcaa87fa7dffaf23048e6f37 9188817dbf04c4023204cd34cb103f762bd7056e 62ab09b4c38efcb051f190eea6c31d42f24e489emain 도 feature/report 도 각자 새 커밋이 있어 병합 커밋 8292139 가 생겼습니다. %P 출력에 부모 해시가 9188817(main 쪽)과 62ab09b(feature/report 쪽) 둘 있습니다.
예제 4: 충돌 만들고 해결하기 — 01_branch_merge.sh 발췌
git switch -c fix/version-a
sed -i 's/version: 1.0/version: 2.0/' app.txt
git commit -qam "버전을 2.0 으로"
git switch -q main
git switch -c fix/version-b
sed -i 's/version: 1.0/version: 3.0/' app.txt
git commit -qam "버전을 3.0 으로"
git switch -q main
git merge --no-ff -m "fix/version-a 병합" fix/version-a
git merge fix/version-b--- fix/version-b 를 합치면 같은 줄이 충돌 ---
Auto-merging app.txt
CONFLICT (content): Merge conflict in app.txt
Automatic merge failed; fix conflicts and then commit the result.
--- 충돌 표시 확인 ---
title: myapp
<<<<<<< HEAD
version: 2.0
=======
version: 3.0
>>>>>>> fix/version-b
--- 충돌 파일 목록 ---
app.txt두 브랜치가 같은 줄을 각각 2.0, 3.0 으로 고쳐 충돌이 났습니다. title: myapp 줄은 양쪽이 같아 충돌 없이 그대로 남았습니다. 파일을 원하는 값으로 정리하고 git add app.txt && git commit 으로 마무리합니다.