06. git rebase practice: solution - nephilim/js-git-kata GitHub Wiki

  • ์ˆœ์„œ 0. git graph

          * f70ec47 - (HEAD, master) line7 added (4 days ago) 
          * 8411c8c - line6 added (4 days ago) 
          *   b781d82 - merged with line(3,4) (4 days ago) 
          |\  
          | * 9c6da70 - (line) line4 added (3 weeks ago) 
          | * d9161bf - line3 added (3 weeks ago) 
          * | 07ea1bc - line5 added (4 days ago)                      // ์ˆ˜์ • ๋Œ€์ƒ changeset 
          |/  
          * 21bb6d0 - line2 added (4 weeks ago) 
          * 3a55ae2 - line1 added (4 weeks ago) 
          * a3d8a4f - initial commit (4 weeks ago)           
    
    1. ๊ณผ๊ฑฐ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๊ธฐ

      • git checkout 07ea1bc

      • git graph

          * f70ec47 - (master) line7 added (4 days ago) 
          * 8411c8c - line6 added (4 days ago) 
          *   b781d82 - merged with line(3,4) (4 days ago) 
          |\  
          | * 9c6da70 - (line) line4 added (3 weeks ago) 
          | * d9161bf - line3 added (3 weeks ago) 
          * | 07ea1bc - (HEAD) line5 added (4 days ago)           // HEAD๋งŒ ์ด๋™  
          |/  
          * 21bb6d0 - line2 added (4 weeks ago)  
        
      • reset or checkout?

        • checkout์œผ๋กœ HEAD๋งŒ ์ด๋™
    2. cat test.txt

         line1
         line2
         line5"
      
    3. text editor๋กœ ์ˆ˜์ •

    4. ์ƒํƒœ ํ™•์ธ

      • git status
      • ์ˆ˜์ •๋œ ํŒŒ์ผ staging/indexing: git add `git ls-files --modified`
        • git ls-files --modified: ls-files์˜ ์ดํ•ด
          • --stage๋กœ staging๊ฒฐ๊ณผ ํ™•์ธ
          • --other --exclude-standard๋กœ untracked
    5. amend commit

      • git commit --amend -a -C HEAD

      • git graph: SHA ๋ ?๋Š” ์ƒ์„ฑํ•˜๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง์„ ์˜๋ฏธ

          * 8226863? - (HEAD) line5 added (14 seconds ago) 
          | * f70ec47 - (master) line7 added (4 days ago)     //  
          | * 8411c8c - line6 added (4 days ago)              // 
          | *   b781d82 - merged with line(3,4) (4 days ago) 
          | |\  
          | | * 9c6da70 - (line) line4 added (3 weeks ago)    // 
          | | * d9161bf - line3 added (3 weeks ago)           // 21bb6d0๊ฐ€ ๋ถ€๋ชจ
          | |/  
          |/|   
          | * 07ea1bc - line5 added (4 days ago) 
          |/  
          * 21bb6d0 - line2 added (4 weeks ago) 
        
    6. ์ƒˆ๋กญ๊ฒŒ merge

      • git merge line

        • ์ถฉ๋Œ ์ˆ˜์ •
      • git commit -C b781d82

        • b781d82์˜ commit message ์žฌํ™œ์šฉ
      • git graph

          *   7fac362? - (HEAD) merged with line(3,4) (13 seconds ago) 
          |\  
          * | 8226863? - line5 added (4 minutes ago) 
          | | * f70ec47 - (master) line7 added (4 days ago) 
          | | * 8411c8c - line6 added (4 days ago) 
          | | *   b781d82 - merged with line(3,4) (4 days ago) 
          | | |\  
          | | |/  
          | |/|   
          | * | 9c6da70 - (line) line4 added (3 weeks ago) 
          | * | d9161bf - line3 added (3 weeks ago) 
          |/ /  
          | * 07ea1bc - line5 added (4 days ago) 
          |/  
          * 21bb6d0 - line2 added (4 weeks ago) 
        
    7. master ์ด๋™

      • git checkout master

      • git reset --hard 7fac362?

      • git graph

          *   7fac362? - (HEAD, master) merged with line(3,4) (6 minutes ago) 
          |\  
          | * 9c6da70 - (line) line4 added (3 weeks ago) 
          | * d9161bf - line3 added (3 weeks ago) 
          * | 8226863? - line5 added (10 minutes ago) 
          |/  
          * 21bb6d0 - line2 added (4 weeks ago) 
        
    8. rebase

      • git rebase --onto HEAD b781d82 f70ec47

        • ํ•ด์„: f70ec47 - b781d82๋ฅผ HEAD์— ๋ถ™์ธ๋‹ค
        • line6, line7 commit์„ merge ๊ฒฐ๊ณผ์— ๋”ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Œ
        • git cherrypick 8411c8c(line6)๊ณผ git cherrypick f70ec47(line7)์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ
      • ์ถฉ๋Œ ํ•ด๊ฒฐ

      • git add .: patch์ ์šฉ ํ›„ commit ์€ rebase์—๊ฒŒ ๋งก๊ธด๋‹ค

      • git rebase --continue

      • git graph

          * 75b1e5d? - (HEAD) line7 added (24 seconds ago) 
          * b00bba1? - line6 added (24 seconds ago) 
          *   7fac362? - (master) merged with line(3,4) (15 minutes ago) 
          |\  
          | * 9c6da70 - (line) line4 added (3 weeks ago) 
          | * d9161bf - line3 added (3 weeks ago) 
          * | 8226863? - line5 added (18 minutes ago) 
          |/  
          * 21bb6d0 - line2 added (4 weeks ago) 
        
  • ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

    1. interactive rebase

      • git rebase -i 21bb6d0

          1 edit 07ea1bc line5 added      // pick > edit
          2 pick d9161bf line3 added
          3 pick 9c6da70 line4 added
          4 pick 8411c8c line6 added
          5 pick f70ec47 line7 added
          6 
          7 # Rebase 21bb6d0..f70ec47 onto 21bb6d0
        
    2. cat test.txt ํ›„ ์ˆ˜์ •

    3. git add test.txt git rebase --continue (๋ฐ˜๋ณต)

      • git graph

          * 73e1039 - (HEAD, master) line7 added (14 seconds ago) 
          * 50c1835 - line6 added (16 seconds ago)
          * ac8f855 - line4 added (37 seconds ago) 
          * 9b6f5a6 - line3 added (74 seconds ago) 
          * 235f05d - line5 added (2 minutes ago) 
          | * 9c6da70 - (line) line4 added (3 weeks ago) 
          | * d9161bf - line3 added (3 weeks ago) 
          |/  
          * 21bb6d0 - line2 added (4 weeks ago) 
        
    4. git branch -D line

      * 73e1039 - (HEAD, master) line7 added (3 minutes ago) 
      * 50c1835 - line6 added (3 minutes ago) 
      * ac8f855 - line4 added (3 minutes ago) 
      * 9b6f5a6 - line3 added (4 minutes ago) 
      * 235f05d - line5 added (5 minutes ago)  // ...
      
  • TODO: github์— ์˜ฌ๋ ค๋†“๊ณ  ์ž‘์—…ํ•˜๋ฉด ๋˜ ์ƒˆ๋กœ์›€