10. git rerere - nephilim/js-git-kata GitHub Wiki

Git Rerere

definition

  • REpeat REcorded REsoltion
    • ๋ฆฌ๋ฆฌ๋ ˆ

procedure

  1. initial setting

    • rr-cache ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ์ด ๋ชฉ์ 
    • git config --global rerere.enabled true
    • ์ง์ ‘ .git/rr-cache ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด๋„ ๋˜์ง€๋งŒ, ๋ช…์‹œ์ ์ด์ง€ ์•Š๋‹ค.
  2. merging with rerere

    • initial setting์„ ๋งˆ์ณค๋‹ค๋ฉด, merge ์ถฉ๋Œ ์‹œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค

        > git merge other_branch      
        CONFLICT (content): Merge conflict in content.txt
        Recorded preimage for 'content.txt'
        ...
      
    • cd .git/rr-cache/xxxxxxx

      • preimage ํ™•์ธ ๊ฐ€๋Šฅ

          <<<<<<<
          print "ohaio"
          =======
          print "hello"
          >>>>>>>
        
    • git ls-files -u content.txt

        100644 ea09e6edc6c043b8e5b8444ed0e7e0848a8d1879 1	content.txt
        100644 367741c7e7d916e776f3e1e219ae11f0e16ee6f3 2	content.txt
        100644 d14a4fdde0d436b1ec39e57913b00a56b4a09848 3	content.txt
      
      • ์ถฉ๋Œ ์‹œ์ ์— ์‚ฌ์šฉ๊ฐ€๋Šฅ
      • commit object๋ฅผ ์ถ”์ ํ•ด๋ณด๋ฉด ๊ฐ๊ฐ์˜ blob object๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ
    • git rerere status

      • ์–ด๋–ค ํŒŒ์ผ์„ ๊ธฐ๋กํ–ˆ๋Š”์ง€ ์•Œ๋ ค์คŒ
    • git rerere diff

      • preimage ์™€์˜ diff
      • this is what rerere will remember
    • CONFLICT edit

      • git add & commit
        • .git/rr-cache/postimage ํ™•์ธ
      • Recorded resolution for 'content.txt' ํ‘œ์‹œ
  3. undo merge

    • git reset --hard HEAD^
  4. rebase topic branch

    • git checkout branch
    • git rebase master
    • ๋ฉ”์‹œ์ง€ ํ™•์ธ
      • Resolved 'content.txt' using previous resolution
      • ์ถฉ๋Œ์‹œ์ ์— conflict ๋‚ด์—ญ์ด ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ์ „๋žต์„ ์ ์šฉํ•œ๋‹ค
  5. recreate conflicted file

    • git checkout --conflict=merge content.txt
      • content.txt์— ๊ด€๋ จ merge ๋‚ด์šฉ์„ ์Ÿ์•„๋‚ธ๋‹ค
      • ์ถฉ๋Œ ์‹œ์ ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • re-resolve
      • git rerere๋ฅผ ํ•˜๋ฉด conflict๊ฐ€ ์ ์šฉ๋จ

references