Git and GitHub
Config
Config some options at the first time using git
Initialize the repository
Initialize local repository
Add file to staging area
then commit
staging area
then commit Can specific single file or all with add .
The shorthand for git add
and git commit
(requires files to be tracked before) is git commit -a -m
.
Add remote origin for local repo
*Rebase
Giúp tái sắp xếp lại các commit, giúp lịch sử commit sạch sẽ và tuyến tính hơn. Khi thực hiện rebase, Git sẽ lấy tất cả các commit của bạn và "phát lại" lên một nhánh mới, như thể bạn đã tạo các commit này dựa trên nhánh đó ngay từ đầu.
Khi chạy git rebase -> sẽ di chuyển các commit (lấy các commit từ nhánh hiện tại mà không trên nhánh gốc ví dụ main và di chuyển chúng lên đỉnh của nhánh gốc). -> Phát lại commit (Áp dụng từng commit đó lên nhánh gốc theo thứ tự ban đầu, nhưng dựa trên điểm bắt đầu mới)
Ví dụ: 1. đang làm việc trên nhánh feature. 2. Nhánh main có người mới commit gì đó mới vào. 3. muốn update những cập nhật từ main vào feature của mình -> dùng git rebase.
Có nghĩa là muốn đưa các thay đổi mới nhất từ
main
vàofeature
để đảm bảo tính năng đang làm ko xung đột vớimain
.
git pull
git log
*Advance command git commit
Git commit --amend
Quên thêm file 2 vào. nếu commit nữa thì quá nhỏ. nên có thể dùng amend
Rollback deleted file if not commit
Git Reset
quay lại commit trước đó trong lịch sử commit của nhánh hiện tại. đồng thời xóa bỏ các thay đổi trong thư mục và việc và staging area.
HEAD
đại diện cho commit hiện tại. khi thực hiện một commit mớiHEAD
sẽ trỏ đến commit đó.HEAD^
đại diện cho commit ngay trước commti hiện tại. tương đươngHEAD~1
--hard
git sẽ không dui chuyểnHEAD
về commit trước đó mà còn xóa tất cả các thay đổi trong thư mục làm việc và staging area. mọi thay đổi chưa được làm việc sẽ bị mất.
Git sẽ quay lại commit trước đó, và
HEAD
sẽ trỏ đến commit đó.Tất cả các thay đổi chưa được commit trong thư mục làm việc sẽ bị xóa hoàn toàn, đưa thư mục làm việc về trạng thái giống như tại thời điểm của commit trước đó.
Ví dụ
Commit 3(HEAD)
Commit 2
Commit 1
chạy git reset --hard HEAD^
HEAD sẽ trỏ đến commit 2, commit 3 sẽ không còn trong lịch sử (nhưng vẫn còn trong reflog
)
mọi thay đổi từ commit 3 sẽ bị mất. (xem git reflog)
Các Tùy Chọn
Khi bạn sử dụng lệnh
bạn có thể chỉ định các tùy chọn khác nhau để xác định cách mà các thay đổi sẽ được xử lý:
-soft
: Di chuyển HEAD về commit trước nhưng giữ nguyên các thay đổi trong staging area (index). Điều này có nghĩa là bạn có thể dễ dàng thực hiện lại commit sau khi chỉnh sửa.-mixed
(mặc định): Di chuyển HEAD về commit trước và loại bỏ các thay đổi khỏi staging area, nhưng vẫn giữ chúng trong thư mục làm việc. Bạn sẽ cần phải sử dụnggit add
để thêm lại các thay đổi nếu muốn commit chúng.-hard
: Di chuyển HEAD về commit trước và xóa tất cả các thay đổi trong thư mục làm việc và staging area. Điều này đồng nghĩa với việc bạn sẽ mất tất cả các thay đổi chưa được commit.
ví dụ
Xử lý conflig
Git branch
Để tạo và merge branch giữa local và remote repo, bạn có thể làm theo các bước sau:
Tạo Branch Mới
Nếu branch đã có thì cứ git checkout branch_name, đẩy lên branch remote = git push origin branch_name
Tạo một branch mới trong local repo:
Tạo branch mới và chuyển đến branch đó
Thêm các thay đổi và commit chúng:
Push branch mới lên remote repo:
Merge Branch
Chuyển sang nhánh
main
trong local repo:Fetch các thay đổi từ remote repo:
Merge branch mới vào nhánh
main
:Nếu có conflict, bạn sẽ cần phải giải quyết chúng bằng cách chỉnh sửa các file bị conflict và sau đó commit lại:
Push các thay đổi lên remote repo:
Ví dụ git branch
Giả sử bạn muốn tạo một branch mới tên là feature-branch
và merge nó vào nhánh main
:
Tạo branch mới
Thêm thay đổi và commit:
Push branch mới lên remote:
Chuyển sang nhánh
main
và fetch các thay đổi:
Merge branch mới vào
main
:
Push các thay đổi lên remote:
Các lệnh Git tà đạo
Cân nhắc khi sử dụng khi làm việc nhóm
1. git push --force
hoặc git push -f
git push --force
hoặc git push -f
Mô tả: Bắt buộc đẩy thay đổi lên remote, ghi đè toàn bộ lịch sử commit của nhánh.
Nguy hiểm: Khi làm việc nhóm,
--force
có thể ghi đè lên commit của người khác nếu họ cũng đã đẩy commit lên cùng nhánh.Khi nào nên dùng: Chỉ dùng khi làm việc trên nhánh cá nhân hoặc trong trường hợp bạn chắc chắn rằng không có ai khác phụ thuộc vào commit của bạn.
2. git rebase -i
(Interactive Rebase) trên nhánh đã chia sẻ
git rebase -i
(Interactive Rebase) trên nhánh đã chia sẻMô tả: Dùng để chỉnh sửa, sắp xếp lại, gộp commit của mình.
Nguy hiểm: Thay đổi lịch sử commit, làm người khác gặp xung đột nếu nhánh đã được đẩy lên remote và có người khác cũng đang làm việc.
Khi nào nên dùng: Chỉ trên nhánh chưa đẩy lên remote hoặc chưa ai khác đang sử dụng.
3. git reset --hard
git reset --hard
Mô tả: Xóa các thay đổi và quay lại trạng thái của commit cụ thể, bỏ qua cả thay đổi trong staging và working directory.
Nguy hiểm: Khi dùng nhầm có thể mất dữ liệu chưa được commit. Nếu áp dụng trên một nhánh đã chia sẻ, có thể gây mất các commit quan trọng.
Khi nào nên dùng: Khi cần hủy thay đổi ở local mà không cần đẩy lên remote.
4. git cherry-pick
từ nhánh chưa ổn định
git cherry-pick
từ nhánh chưa ổn địnhMô tả: Chọn một commit cụ thể từ một nhánh khác để áp dụng vào nhánh hiện tại.
Nguy hiểm: Có thể làm lịch sử commit khó theo dõi và gây xung đột nếu cherry-pick nhầm commit chưa ổn định.
Khi nào nên dùng: Khi cần lấy một commit duy nhất và chắc chắn nó sẽ không thay đổi sau này.
5. git commit --amend
git commit --amend
Mô tả: Chỉnh sửa commit cuối cùng, thay đổi message hoặc thêm bớt nội dung vào commit cuối.
Nguy hiểm: Thay đổi commit history, gây xung đột với người khác nếu nhánh đã được đẩy lên remote.
Khi nào nên dùng: Chỉ khi commit chưa được đẩy lên remote.
6. git stash -p
hoặc git stash pop
git stash -p
hoặc git stash pop
Mô tả: Lưu các thay đổi tạm thời, có thể gây rối nếu quên không pop hoặc apply đúng thứ tự.
Nguy hiểm: Dễ dẫn đến việc mất các thay đổi nếu không nhớ thao tác hoặc pop nhầm.
7. git reflog delete
hoặc git gc
git reflog delete
hoặc git gc
Mô tả:
reflog delete
xóa các bản ghi lịch sử gần đây,git gc
dọn dẹp các tham chiếu và commit không còn sử dụng.Nguy hiểm: Có thể xóa các commit cần thiết cho người khác, gây khó khăn trong việc phục hồi commit.
Last updated