Đầu tiên muốn sửa được lỗi trong git ta phải thực hiện tạo ra nó trước đã. Phần 1 sẽ nói 1 số lệnh cơ bản trong git theo follow tạo và sử dụng 1 project.
1. Khởi tạo git
git init
2. Thêm mới remote vào project
# hiển thị danh sách remote trong git của project
git remote -v
# Thêm mới một remote vào git
git remote add origin <url>
3. Clone project
git clone
4. Làm việc cùng branch
branch
thể hiện mỗi nhánh nhỏ của một cái cây và nhánh chính tương đương với thân cây thường được gọi là master. Nếu từng làm việc thực tế trong các dự án bạn thường thấy nhánh master sẽ là nhánh rỗng, thay vào đó những developer sử dụng các nhánh có tên như development, product, test,.... Điều này giúp cho các lập trình viên phân biện và thao tác trên những môi trường tương ứng quan quá trình phát triển phần mềm một cách dễ dàng và minh bạch hơn.# Danh sách branch
git branch
# tạo mới branch
git branch (<name>)
# Di chuyển từ branch hiện tại đến một branch khác bằng tên branch đó
git checkout <name>
# Tạo và di chuyển từ branch hiện tại đến một branch mới
git checkout -b <name>
```markdown
**5. Hợp nhất branch**
- Đây là một trong những câu lệnh cơ bản thường dùng của quy trình. Nhưng với việc các tool hỗ trợ như github, gitlab,... thì việc sử dụng câu lệnh này chỉ còn nằm ở dưới local mà thôi.
``` shell
# để hợp nhất nhánh branch-name vào nhánh master
git merge <branch-name>
6. Cập nhật code mới nhất về
Khi làm việc một mình thực tế bạn sẽ không cần đến git nhưng khi làm việc nhóm và muốn lấy code mới nhất từ một nhánh nào đó trên repo online về thì bạn sẽ dùng lệnh sau:
git pull origin <branch>
7. xem status và một vài thứ nữa
git status
git diff –-stat
git commit --amend
git branch -m <tên branch sau khi đổi>
Note: HEAD, Working tree, Index trong git là gì?
git reset HEAD~
Di chuyển HEAD về vị trí commit reset và vẫn giữ nguyên tất cả các thay đổi của file, nhưng loại bỏ các thay đổi khỏi stage (Đưa HEAD và index về như cũ)
git reset {commit_id}
git reset --hard HEAD~
--hard
có nghĩa là bỏ commit đi và bỏ cả những thay đổi chưa được commit trong working space. Khi này môi trường sẽ hoàn toàn "sạch sẽ" như thời điểm trước khi commitgit reset --soft HEAD~
--soft
có nghĩa là bỏ commit đi nhưng giữ nguyên những thay đổi chưa được commit trong working space.--soft
hữu dụng khi bạn muốn giữ lại những thay đổi chưa commit cho lần commit tiếp theo# commit_hash là mã commit
git revert <commit_hash>
git commit --amend
# Bạn có thể sử dụng lệnh này để viết lại commit message
# Option --no-edit sử dụng khi bạn chỉ muốn thêm file mà không muốn sửa commit message
git commit --amend --no-edit
#Đầu tiên là tạo một branch khác chứa trạng thái mà ta đã commit
$ git branch other-branch
#Đưa HEAD, index của master về 1 commit trước đó
$ git reset --hard HEAD~
#Check out sang branch có commit trước đó
$ git checkout other-branch
Sử dụng rebase + squash (or fixup) để tổng hợp lại các commit cũ
Rebase về n commit trước (có bao gồm cả HEAD)
# Ví dụ) git rebase -i HEAD~3
$ git rebase -i HEAD~<số lượng commit>
# Sau lệnh này sẽ mở ra editor nên hãy sửa lại như sau rồi lưu lại
# Note: Với vim bấm “a” để bắt đầu edit → Bấm ECS để dừng thao tác edit → Bấm “shift + z + z” để save
# (trước khi sửa) các commit cũ từ trên xuống dưới
pick aa11bbc commit message 1
pick b2c3c4d commit message 2
pick 4e56fgh commit message 3
・・・
# (sau khi sửa) các commit trước là squash sẽ được tổng hợp vào 1 commit ở đằng trước
pick aa11bbc commit message 1
squash b2c3c4d commit message 2
squash 4e56fgh commit message 3
# Đầu tiên là đưa HEAD và index về 1 commit trước đó.
# Nói cách khác là ta coi như là chưa từng có commit to đùng kia và chỉ giữ lại trạng thái của working tree
$ git reset HEAD~
# Dùng lệnh sau đây để thêm các phần nhỏ vào index
$ git add -p
# Khi các phần cần thay đổi đã có thì ta commit
$ git commit -m "commit message"
# Sau đó ta lặp đi lặp lại các bước như trên cho phần còn lại
# Tạm thời lưu lại các phần công việc còn đang làm dở
$ git stash -u
# Chuyển sang một branch khác và làm việc
$ git checkout -b other-branch
$ git add <các file cần thiết>
$ git commit -m "commit message"
# Trở về branch cũ
$ git checkout origin-branch
# Lấy lại các nội dung công việc đang làm dở trước đó
$ git stash pop
# Đầu tiên là xem lại toàn bộ lịch sử commit
$ git reflog
# Từ đó chọn commit muốn phục hồi và khôi phục lại
# ví dụ: git reset --hard HEAD@{2}
$ git reset --hard <commit>
# Đầu tiên là xem lại toàn bộ lịch sử commit
$ git reflog
# Từ các commit này, chọn rồi tạo branch mới
# ví dụ: git branch new-branch HEAD@{2}
$ git branch <tên branch> <commit_id>
git reset --hard ORIG_HEAD
# Commit trước khi reset được tham chiếu bằng ORIG_HEAD
# Lấy từ code mới remote
$ git pull origin master
# Phát sinh conflict
# Suy nghĩ lại thì trong pull(fetch + merge) muốn bỏ phần merge đi:
$ git reset --hard ORIG_HEAD
git branch -m new-name
git push remote-name :old-name new-name
git push origin --delete remote-branch-name
Đó là các thao tác cơ bản và cách sửa một số lỗi thường gặp khi làm việc với git của mình. Rất mong các bạn góp ý để mình cải thiện bài viết này và các bài sau hơn nữa.
Via Viblo