Trước toàn dùng svn tortoise, chuyển sang dùng github.com, cảm thấy thật hiện đại, xịn, chuyên nghiệp, và … khó hiểu vãi lúa. Vừa rồi mới dính một quả lộn code, mà không hiểu tại sao lộn, check log thì vẫn thấy là khi bị conflict, mình đã “Accept theirs”, nghĩa là dùng code của master, thế mà mấy hôm sau check lại lại thấy lù lù code của mình.
Và để fix lại lỗi commit nhầm, dưới sự hướng dẫn của các chuyên gia git, mình đã làm như sau:
- Tìm ra bản code trước khi có phiên bản lỗi, gọi là bản ABC đi.
- Sang branch của mình đang code (git checkout thai_branch)
- Hồi về phiên bản ABC bằng lệnh “git rebase -i ABC^”, nhớ là có dấu mũ (^) sau ABC
- Giải quyết hết các file đang bị conflict, commit lên local.
- Pull branch của mình về, giải quyết conflict nếu có. Commit lên local.
- Checkout sang branch master, pull code của branch master về,
- Sang branch thai_branch, gõ lệnh merge: git merge –no-ff, giải quyết các conflict nếu có, commit lên local
- Push lên branch của mình.
- Push lên branch master.
Bản chất của mình sai do pull chéo, thấy Xutale giải thích thế. Nghĩa là đang đứng ở thai_branch nhưng lại gõ lệnh “git pull origin master”. Đáng ra phải làm theo thứ tự sau:
- git commit (commit code trên local, đề phòng mất code)
- git pull origin thai_branch (thường là bước này làm trước khi code, sau khi code chắc cũng không sao, vì chỉ mình mình code nhánh này)
- git checkout master (sang bên master)
- git pull origin master (lấy code mới nhất trên master về nhánh master)
- git checkout thai_branch
- git merge –no-ff master (merge master vào thai_branch)
sau đó giải quyết các conflict, sau đó thì đẩy lên thai_branch
- git push origin thai_branch
Sau đó lại sang master để merge và push:
- git checkout master
- git merge –no-ff thai_branch
- git push orign master
Đây là thứ tự lệnh đã thực hiện:
337 git checkout thai_branch
338 git branch
339 git status
340 git rebase -i 19a5625ebdd079d8e2165c67b89369cbbaadfcee^
341 git commit
342 git status
343 git rebase –skip
344 git rebase –continue
345 git status
346 git add -A .
347 git status
348 git rebase –continue
349 git status
350 git add src/java/recsys/datacollector/crawler/sites/DaemonReleaseData.java
351 git status
352 git rebase –continue
353 git status
354 git add src/java/recsys/datacollector/crawler/sites/news/EvaVn.java
355 git status
356 git rebase –skip
357 git status
358 git pull origin -f
359 git status
360 git log
361 git checkout master
362 git pull origin master
363 git checkout thai_branch
364 git merge –no-ff master
365 git status
366 git add -A .
367 git status
368 git commit -m “merge code after rebase”
369 git status
370 git log
372 git branch
373 git push origin thai_branch
374 git pull origin thai_branch
375 git push origin thai_branch
376 git checkout master
377 git pull origin master
378 git merge –no-ff
379 git merge –no-ff thai_branch
380 git status
382 git push origin master
Đọc khó hiểu vãi lều :))
Khi naò dùng và commit lỗi sẽ hiểu dần :))
lol, chia buồn chia buồn