λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Git & GitHub

git diff λͺ…λ Ήμ–΄λ₯Ό 톡해 두 branch의 차이점 ν™•μΈν•˜κΈ°

by 주발2 2022. 2. 27.
λ°˜μ‘ν˜•

πŸ“Ž git diff branch1..branch2

μ•ˆλ…•ν•˜μ„Έμš”, 이번 μ‹œκ°„μ—λŠ” git diff λͺ…λ Ήμ–΄λ₯Ό 톡해 두 브랜치 μ‚¬μ΄μ—μ„œ 차이점을 ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

 

πŸ’‘ κ°œμš”

보톡 μ½”λ“œ 이λ ₯을 κ΄€λ¦¬ν•˜λŠ” λ„κ΅¬λ‘œ git, github(gitlab, bitbucket) 등을 μ‚¬μš©μ„ ν•˜λŠ”λ°μš”, 

git-flow μ „λž΅μ„ μ‚¬μš©ν•˜μ—¬ main, develop, feature, hotfix λ“±μ˜ 브랜치λ₯Ό κ΄€λ¦¬ν•˜λ‹€ 보면 브랜치 κ°„ μ½”λ“œκ°€ 동기화가 λ˜μ§€ μ•Šμ„ κ²½μš°κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€.

 

https://techblog.woowahan.com/2553/

 

보톡 git-flow μ „λž΅μ—μ„œ μ‚¬μš©λ˜λŠ” λΈŒλžœμΉ˜μ— λŒ€ν•œ μ „λž΅μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€

  • main(master) : μ‹€μ œ μƒμš© ν™˜κ²½μ— λ°˜μ˜ν•˜λŠ” 브랜치
  • develop : λ‹€μŒ μΆœμ‹œ 버전에 λŒ€ν•΄ κ°œλ°œν•˜λŠ” 브랜치
  • feature : κΈ°λŠ₯을 κ°œλ°œν•  λ•Œ μ‚¬μš©ν•˜λŠ” 브랜치
  • hotfix : μƒμš© ν™˜κ²½μ—μ„œ λ°œμƒν•œ 버그λ₯Ό μˆ˜μ •ν•  λ•Œ μ‚¬μš©ν•˜λŠ” 브랜치

νšŒμ‚¬λ§ˆλ‹€ μ‘°κΈˆμ”© 차이점은 μžˆμ„ 수 μžˆμœΌλ‚˜, 보톡은 μœ„μ™€ λΉ„μŠ·ν•œ λ§₯락으둜 각 브랜치λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

μœ„ git-flow μ „λž΅μ— λ”°λ₯΄λ©΄ 일반적으둜 κ°œλ°œμ„ μ§„ν–‰ν•œ ν›„ μƒμš© ν™˜κ²½μ— λ°˜μ˜ν•˜κΈ° κΉŒμ§€μ˜ 브랜치 κ΄€λ¦¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

(μ΄λŸ¬ν•œ 과정도 νšŒμ‚¬λ§ˆλ‹€ λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ^^)

  1. feature λΈŒλžœμΉ˜μ—μ„œ κΈ°λŠ₯을 κ°œλ°œν•œ ν›„ develop 브랜치둜 PR & Merge
  2. develop 브랜치 -> main(master) 브랜치둜 PR & Merge
  3. hotfix -> main 브랜치둜 PR & Merge(κΈ΄κΈ‰ν•˜κ²Œ 버그λ₯Ό μˆ˜μ • ν•  경우)

μœ„μ™€ 같은 κ³Όμ •μ—μ„œ μ—¬λŸ¬ λͺ…이 ν˜‘μ—…μ„ μ§„ν–‰ν•˜λ‹€ 보면 develop λΈŒλžœμΉ˜μ—λŠ” λ°˜μ˜ν–ˆμœΌλ‚˜ mainμ—λŠ” λ°˜μ˜λ˜μ§€ μ•Šμ€ κ²½μš°λ„ μ‘΄μž¬ν•  수 있고, hotfix -> main 으둜 λ°˜μ˜ν—€μœΌλ‚˜ main -> develop 브랜치둜 λ°˜μ˜λ˜μ§€ μ•ŠλŠ” κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€.

 

λ”°λΌμ„œ git diff λͺ…λ Ήμ–΄λ₯Ό 톡해 두 브랜치 μ‚¬μ΄μ—μ„œ 차이점을 ν™•μΈν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

 

 

πŸ’‘ git diff λͺ…λ Ήμ–΄ μ‚¬μš©ν•˜κΈ°

ν˜„μž¬ 컀밋 λ‘œκ·ΈλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

git log --branches --decorate --graph --oneline

 

 

λΈŒλžœμΉ˜μ™€ 브랜치 μ‚¬μ΄μ˜ 차이점을 ν™•μΈν•˜λŠ” diff λͺ…λ Ήμ–΄λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

// branch 2λ₯Ό κΈ°μ€€μœΌλ‘œ branch1μ—λŠ” μ—†κ³ , branch 2μ—λ§Œ μ‘΄μž¬ν•˜λŠ” λ‚΄μ—­
git diff branch1..branch2

μ•„λž˜ μ½”λ“œλŠ” 예제둜 μ‚΄νŽ΄λ³Ό main, develop, feature/12 λΈŒλžœμΉ˜μ™€ 각각의 μ½”λ“œμž…λ‹ˆλ‹€.

 

main 브랜치

main branch

public class MainBranch {
    public static void main(String[] args) {
        System.out.println("Common main branch");
    }
}

 

develop 브랜치

develop branch

public class DevelopBranch {
    public static void main(String[] args) {
        System.out.println("Develop Branch");
    }
}

public class MainBranch {
    public static void main(String[] args) {
        System.out.println("-------------------");
        System.out.println("Common main branch");

        System.out.println("This is develop branch");
    }
}

 

feature/12 브랜치

feature/12 branch

public class FeatureBranch {
    public static void main(String[] args) {
        System.out.println("Feature Branch");
    }
}

public class MainBranch {
    public static void main(String[] args) {
        System.out.println("-------------------");
        System.out.println("Common main branch");

        System.out.println("This is feature branch");
    }
}

 

git diff main..develop

DevelopBranch 클래슀의 경우 main λΈŒλžœμΉ˜μ—λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 전체가 μ΄ˆλ‘μƒ‰(+)으둜 보이고, MainBranch의 경우 일뢀 μΆ”κ°€λœ λΆ€λΆ„λ§Œ μ΄ˆλ‘μƒ‰(+)으둜 보이게 λ©λ‹ˆλ‹€.

 

 

git diff develop..main

develop..main 의 경우 main..develop μ™€λŠ” λ°˜λŒ€λ‘œ main λΈŒλžœμΉ˜μ— μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλŠ” 빨간색(-)으둜 λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€.

 

 

git diff develop..feature/12

develop..feature/12 의 경우 feature/12 브랜치λ₯Ό κΈ°μ€€μœΌλ‘œ DevelopBranch ν΄λž˜μŠ€λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 빨간색(-) 으둜 λ‚˜νƒ€λ‚˜κ³ , FeatureBranch 클래슀의 경우 μ‘΄μž¬ν•˜λ―€λ‘œ μ΄ˆλ‘μƒ‰(+)으둜 λ‚˜νƒ€λ‚˜λ©°, MainBranchμ—μ„œλ„ λ™μΌν•˜κ²Œ λ‚˜νƒ€λ‚˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

πŸ’‘ 마무리

μ΄μƒμœΌλ‘œ git diff λͺ…령어에 λŒ€ν•΄ κ°„λž΅νžˆ μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

μœ„ μ˜ˆμ œλŠ” 맀우 κ°„λ‹¨ν•˜κ²Œ μž‘μ„±λœ μ½”λ“œμ΄κΈ° λ•Œλ¬Έμ— ꡳ이 λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šλ”λΌλ„ ν•œ λˆˆμ— 차이점을 νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ‹€λ¬΄μ—μ„œ μž‘μ„±λ˜λŠ” μ½”λ“œμ˜ 경우 수백~수천 라인에 이λ₯΄κΈ°μ— 차이점을 눈으둜 ν™•μΈν•˜κΈ°μ—λŠ” νž˜λ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 λ•Œ μœ„ λͺ…λ Ήμ–΄λ₯Ό 톡해 두 브랜치 μ‚¬μ΄μ—μ„œ 차이점을 보닀 μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆμ„ λ“― ν•©λ‹ˆλ‹€.

 

λ°˜μ‘ν˜•

λŒ“κΈ€