Xem Git restore là gì tuyệt vời nhất 2024
Có lẽ chúng ta đã quá quen sở hữu Git, một trong các công cụ để quản lí repository (hay còn gọi là phiên bản control) hiệu quả nhất hiện giờ.
Và developer không thể sống thiếu Git được buộc phải không nào? ko kể một số câu lệnh đơn kém chất lượngn chúng ta dùng hằng ngày, sau đây chúng ta cùng mua hiểu kỹ lại một lần nữa các câu lệnh từ cơ bản đến nâng cao.
Hiểu rõ và thành thạo Git command giúp bạn công việc hiệu quả hơn cực kỳ nhiều.
Git
ngoại trừ git commands chúng ta vẫn có thể dùng git GUI như Source Tree, Git Kraken, Github for Desktop, ví như bạn dùng VS Code thì đã có sẵn Git mang một số chức năng cơ bản và công thêm sẽ cực kỳ thấp ví như bạn có thể dùng command bởi vì command giúp bạn trong cool ngầu hơn, xịn xò hơn
Bạn có thể sắm hiểu một số extension trong VS Code như Git history & GitLens thì cũng đã đủ khiến cho việc có Git.
Một số giả dụ chỉ có git commands mới khiến được như: update branch dưới background (khi bạn ở một branch bạn cũng có thê pull code của một branch khác mà không cần chuyển branch qua lại), và một số TH bạn có thể chuyển branch nhanh và tiện hơn.
Nội dung
- TL;DR (Tóm tắt nếu bạn không muốn đọc nhiều)
- Kiến thức chung
- Một git model điển hình
- git init
- git clone
- git add
- git commit
- các lưu ý khi dùng git commit
- git checkout
- Detached HEAD
- git reset
- git revert
- git merge
- git rebase
- git cherry-pick
- git stash
TL;DR (Tóm tắt nếu bạn không muốn đọc nhiều)
không tính các lệnh Git Đôi khi bạn bắt buộc biết như git clone, git add, git commit, git checkout, git merge, git init, git status, git push, git pull, git fetch, git log, git merge, git stash. các lệnh này đa số dễ hiểu và thông dụng.
Bạn phải dành thời gian sắm hiểu thêm một số lệnh đặc biệt trong git như git rebase, git reset, git revert.
Một số lệnh thường dùng trong Git:
// 1. Chuyển qua công việc trên nhánh feature
git checkout feature
git checkout master
git checkout -b new-branch
// Bạn có thể checkout từ một commit và sau đó nó tạo thành một Detached HEAD
// buộc phải lưu ý giả dụ này bên dưới ví như không muốn mất nhánh 🙂
git checkout HEAD~3
git checkout commit-id
git checkout commit-id -b new-branch
// 2. merge code từ nhánh master vào nhánh feature
gitcheckoutfeature
gitmergemaster
// 3. rebase code cho nhánh feature: merge code từ nhánh master vào nhánh
// feature và đổi “base” cho nhánh feature – tham khảo “base” là gì bên dưới
gitcheckoutfeature
gitrebasemaster
// 4. Xoá lệnh merge vừa đang chạy
git merge –abort
// 5. Git fetch
git fetch
git fetch origin master:master
// 6. Sự khác nhau giữa git reset vs. git revert
// các option khi reset –mixed, –soft, –hard
git reset HEAD~2
git reset commit-id
git revert HEAD~1
git revert commit-id
// 7. sử dụng cherry-pick
git cherry-pick commit-id
// 8. Lưu lại các file thay đổi khi checkout qua nhánh khác
git stash
git stash push
git stash push -m “my-stash”
git stash pop
git stash apply stash@{2}
git stash list
git stash clear
// 9. Push code lên remote
git push
git push –set-upstream origin my-branch
git rebase giúp cho history sạch đẹp hơn, nhưng nguy hiểm giả dụ bạn rebase master hoặc main brach. Bạn có thể tham khảo thêm các quy tắc vàng của rebase tóm lại bắt buộc sử dụng git merge, nếu thiết yếu chỉ dùng rebase trên nhánh feature, không được rebase nhánh public như master
git fetch origin master:master khi bạn đang đứng ở một nhánh feature bạn có thể pull code mới nhất của master mà không cần checkout qua master để pull
kế bên commit-id, chúng ta có thể chỉ định cha của HEAD (ví dụ HEAD~1 là cha của HEAD, HEAD~2 là cha của HEAD~1, ) để git revert hay reset về vị trí một commit trên history của một nhánh. Ví dụ chúng ta đang đứng trên nhánh master, chúng ta có thể hình dung sơ đồ các HEAD được đánh thứ tự như sau:
Kiến lắp thêmc chung
Bạn có thể tự hỏi rằng tại sao mỗi commit id trong Git lại là một chuỗi ký tự lằng nhằng khó nhớ. Bởi vì đó là biện pháp mà Git nhận biết thay đổi khi chúng ta sửa một file nào đó, git sẽ tiến hành đạp xe fakei thuật hash lại tất cả nội dung và chỉ cần thay đổi một ký tự trong một file thì một hash mới sẽ được tạo (nháii thuật SHA1), mỗi hash như là một commit id, nó là duy nhất trong history.
các commit trong Git như là một danh sách liên kết, mỗi commit cất thông tin về: commit id, tree, parent (trỏ về commit trước đó), author, ..
Một git model điển hình
Chúng ta sẽ tậu hiểu kỹ hơn về git commands trong phần tiếp theo.
git init
Tạo mới một Git repo và add thư mục .git vào trong dự án của bạn.
Đôi lúc để cho đơn nháin, bạn có thể lên Github vào tạo một repo rỗng (không có README.md) file từ đầu và sau đó dùng một số lệnh Github đề nghị để tạo một repo liên kết giữa remote và local như sau:
echo “# myapp” >> README.md
git init
git add README.md
git commit -m “first commit”
git branch -M main
git remote add origin :thaunguyen/myapp.git
git push -u origin main
git clone
Clone một repo có sẵn trên github. Bạn có thể clone bằng HTTPS link hay SSH links. Thực chất bên trong git clone, đầu tiên nó sẽ đạp xe git init trước, sau đó git clone sẽ copy tất cả files từ remote về local.
git add
Thêm các file mà bạn đã tạo mới hay sửa đỗi trong working directory lên staging area.
git add
git add . (thêm tất cả các file đang bị thay đổi vào staging)
Trong sơ đồ ở trên chúng ta có 3 thành phần:
- Working Directory là thư mục chúng ta đang thực hành, bao gồm các file ở lắp thêm local
- Staging Area (hay là Index) là khu vực lưu các file chuẩn bị được commit.
- History (hay là Commit Area) là khu vực lưu tất cả các file sau lúc commit từ Staging Area.
Một flow thường thì là chúng ta sửa một vài file ở working directory (local) => sau đó chúng ta dùng git add để đẩy các file đó lên staging và sau đó dùng git commit để commit lên history của Git.
- git add files(tên files cần add), git add -a, git add .
- git reset files(tên files cần reset) hoặc git reset HEAD~1 hay commit id
- git checkout files(tên file cần checkout)
Bạn có thể dùng git status để kiểm tra xem bây giờ các file của mình đang sửa đổi ở trạng thái nào (local, staging, hay đã commit)
git commit
lúc bạn có một commit mới f0cec thì HEAD và con trỏ được di chuyển tới commit đó và nó trỏ về cha của nó là commit ed489
Minh hoạ cho git commit:
lúc bạn lỡ commit sai message bạn có thể tiêu dùng lệnh: git commit –amend -m “Update commit message” để sửa đổi lại commit trước đó mà nó sẽ không tạo thêm commit mới.
Commit ed489 là commit sai và sau đó amend lớn mạnh ra một commit mới là 4ca87. Nhưng trong history của bạn commit ed489 sẽ bị huỷ bỏ và không nằm trong history.
các lưu ý lúc tiêu dùng git commit
- bắt buộc chia nhỏ commit theo từng mục đích, nên giảm thiểu dùng git add . để commit tất cả các file
- Commit nhỏ giúp người review code dễ đọc và hiểu code bạn hơn
- Commit nhỏ dễ reset và revert code hơn
- Viết commit message phân biệt về thay đổi của bạn, đảm bảo người đọc hiểu bạn thay đổi gì.
git checkout
tiêu dùng để thay đổi branch công việc, hay bạn có thể checkout một commit trước đó trên branch ngày nay của bạn.
Bạn đang ở branch main và checkout qua branch stable.
Hay bạn có thể dùng checkout để tạo branch mới (branch new) chủ yếu từ một branch và chuyển qua lúcến cho việc trên branch mới tạo. Ví dụ như:
- git pull: lấy code mới nhất từ remote về working directory (local)
- git push: đưa các thay đổi ở local branch lên remote branch
- git fetch: lấy tất cả thay đổi ở remote về local, ví dụ như: có tag mới, branch mới ở remote.
Xem lại sơ đồ ở trên.
Detached HEAD
Thỉnh thoảng bạn muốn checkout từ một commit id của một nhánh (để chỉ muốn tạo một nhánh mới từ những thay đổi của commit đó). Bạn có thể dùng lệnh:
git check
git checkout HEAD~3
Sau lúc HEAD trỏ về commit b325c, chúng ta có một Detached HEAD như sau:
có Detached HEAD giả dụ bạn không tạo một nhánh từ đây thì lúc bạn checkout sang nhánh khác (ví dụ nhánh main) thì Detached HEAD sẽ mất.
Cho bắt buộc ví như bạn muốn lưu lại Detached HEAD, bạn nên tạo một nhánh mới như sau:
Bạn đi bộ lệnh git checkout -b new để tạo một nhánh mới gần như từ Detached HEAD. Và bạn đã lưu nhánh new lại, bạn có thể tự do checkout sang nhánh khác.
Hay bạn có thể thực hiện công đoạn này bằng cú pháp rút gọn như sau:
git checkout
Lệnh này vừa checkout từ một commit và sau đó tạo một nhánh mới tên new.
git reset
git reset tiêu tiêu tiêu dùng để thay đổi con trỏ trong một branch về một commit trước đó. Và nó sẽ thay đổi working directory và staging của nhánh hiện tại chúng ta đang đứng.
Ví dụ như chúng ta reset con trỏ về HEAD~3 (trỏ về trước HEAD 3 commit) trên một nhánh như sau:
Working directory và staging sẽ thay đổi dựa vào những option bạn tìm như sau:
- mixed (default): giữ lại những file bạn đang sửa trên disk, xoá những file trên staging.
- soft: giữ lại những file bây giờ bạn đang sửa trên disk và staging. Chuyển commit nhưng không lúcến thay đổi file đang sửa và không xoá file trên staging.
- hard: xoá bỏ tất cả files thay đổi trên disk (working directory) và staging. Tất cả những file trên disk và trên stage đều bị reset về giống hệt như commit ở HEAD~3.
giả dụ bạn không truyền commit id thì mặc định là git reset HEAD. Nó không lúcến cho thay đổi con trỏ trên branch nhưng nó sẽ xoá file bạn đang thay đổi tuỳ thuộc vào option(mixed, soft, hard) mà bạn sắm.
git revert
git reset không tạo mới commit, trong lúc đó git revert sẽ undo lại tất cả những thay đổi của một commit mà chúng ta chỉ định và tạo mới một commit mới trên history.
Lệnh git revert C2 sẽ phân phối một commit mới C4 và bỏ (undo) lại tất cả thay đổi của commit C2.
git merge
Merge có nghĩa là lấy tất cả thay đổi của một nhánh khác để apply cho nhánh đang đứng. Ví dụ merge master branch vào feature branch hay ngược lại merge feature branch vào master branch để release một bản production mới.
Bạn đang đứng ở feature và đạp xe git merge master
Tất cả những commit, thay đổi (màu xanh dương) sẽ được merge vào nhánh feature (màu xanh lá) và tạo thành một commit mới ở cuối nhánh feature. Hai commit màu xanh dương được gộp vào một commit màu xanh lá.
git rebase
Cũng giống như git merge, git rebase sẽ lấy tất cả thay đổi của một nhánh khác để apply cho nhánh đang đứng. Nhưng mang history đẹp hơn git merge
Vi dụ: bạn đang đứng ở nhanh topic và đi bộ git rebase main
Sau lúc chạy lệnh rebase thì nhánh topic sẽ đựng tất cả những commit mới của main. Và hai commit màu vàng được thay thế cho 2 commit cũ trên nhánh topic (mỗi tên gạch nối). Và trên sự thật nhánh topic sẽ bao gồm 6 commit (2 commit trên nhánh topic trước khi rebase và 4 commit của nhánh main).
mang rebase để dễ tưởng tượng, bạn có thể hiểu rebase có nghĩa là thay đổi base của một nhánh (ví dụ ở đây là nhánh topic). Trước khi rebase, base của nhánh topic trỏ vào commit a47c3, nhưng sau khi rebase, chúng ta chỉ đơn nháin đổi base trỏ về HEAD của main (commit da985).
Git rebase không thêm node mới (commit mới) vào history như git merge (trước và sau rebase chỉ có 6 commit không tạo thêm commit thừa cho history clean history )
Và khi đọc vào history của nhánh topic sau khi rebase bạn nhìn thấy được những thay đổi gì đã xảy ra trên nhánh main sở hữu những commit a47c3, b325c, c10b9, da985.
Khác mang git merge, trong hợp này ví như bạn chạy git merge main thì khi nhìn vào history của nhánh topic bạn sẽ không thấy những commit từ main, bởi vì nó đã gom lại chỉ một commit duy nhất như sau:
Tuỳ thuộc vào bạn tậu git rebase hay git merge, nhưng tôi thường sử dụng git merge vì tôi ko cần một clean history và đôi khi git rebase gây cầu kỳ và cách sử dụng của git merge dễ hiểu hơn đối có tôi.
Bạn có thể thấy fakei say đắm cách hoạt động của rebase khá khó và gây nhầm lẫn cho nhiều dev. bắt buộc để đơn kém chất lượngn bạn có thể sử dụng git merge.
git rebase giúp cho history sạch đẹp hơn, nhưng nguy hiểm giả dụ bạn rebase master hoặc main branch. Bạn có thể tham khảo thêm những quy tắc vàng của rebase
Tóm lại nên sử dụng git merge, ví như đòi hỏi chỉ sử dụng rebase trên nhánh feature, không được rebase nhánh public như master
git cherry-pick
git cherry-pick cấp dưỡng một bản copy của một commit từ một nhánh khác và apply vào nhánh ngay bây giờ với cùng message và thay đổi từ commit đó.
Bạn đang đứng ở nhánh main và cherry-pick một commit 2c33a từ nhánh topic vào nhánh main. Kết quả như hình trên, có một commit mới f142b được cấp dưỡng trên nhánh main.
git stash
Khi bạn thay đổi một số file và bạn muốn checkout sang nhánh khác. bây giờ git sẽ không cho đơn vị checkout sang nhánh khác trường hợp bạn chưa commit những thay đổi hiện tại, hay nếu bạn cố tình đi qua nhánh khác có thể những file bạn đang thay đổi (sửa, thêm) sẽ bị mất.
Trong trường hợp này bạn có thể dùng git stash dùng để lưu lại những thay đổi trên working directory để sử dụng lại thời gian sau.
Một số lệnh git stash thường dùng:
- git stash (tạo một stash)
- git stash push (tạo một stash), git stash push -m my-stash (tạo một stash với message để dễ nhớ)
- git stash pop stash@{2} (xoá một stash) stash@{2} được lưu như một stash id trong danh sách những stash, stash list là một ngăn xếp (stack)
- git stash apply stash@{2} (apply stash trở lại nhánh hiện tại)
- git stash list (liệt kê tất cả những stash)
- git stash clear (xoá tất cả stash)
Xem thêm những thủ thuật xịn cho Javascript tại Youtube của tôi.
Tham khảo
A Visual Git Reference
Using Git Effectively
Bạn đang đọc bài viết: Git restore là gì tuyệt vời nhất 2024
✅ Thâm niên trong nghề | ⭐Công ty dày dặn nghiệm trong ngành giặt từ 5 năm trở lên. |
✅ Nhân viên chuyên nghiệp | ⭐Đội ngũ nhân viên chuyên nghiệp, nhiệt tình có kinh nghiệm và kỹ năng trong giặt đồ. |
✅ Chi phí cạnh tranh | ⭐Chi phí giặt luôn cạnh tranh nhất thị trường và đảm bảo không có bất kỳ chi phí phát sinh nào. |
✅ Máy móc, thiết bị hiện đại | ⭐Chúng tôi đầu tư hệ thống máy móc, thiết bị hiện đại nhất để thực hiện dịch vụ nhanh chóng và hiệu quả nhất |
HỆ THỐNG CỬA HÀNG GIẶT LÀ CÔNG NGHIỆP PRO
- Điện thoại: 033.7886.117
- Website: Giatlacongnghieppro.com
- Facebook: https://www.facebook.com/xuonggiatlacongnghiep
- Tư vấn mở tiệm: Giặt là hà nội
- Tư dậy nghề: Học nghề và mở tiệm
- Địa chỉ:Ngõ 199/2 Đường Phúc Lợi, Phúc Lợi, Long Biên, Hà Nội
Cở sở 01: Ngõ 199/2 Đường Phúc Lợi, Phúc Lợi, Long Biên, Hà Nội Cơ Sở 02: Số 200, Trường Chinh, Quận Thanh Xuân, Hà Nội Cơ Sở 03: Số 2C Nguyên Hồng, Thành Công, Ba Đình, Hà Nội Cơ Sở 04: Số 277 Thanh Nhàn, Hai Bà Trưng, Hà Nội Cơ Sở 05: Số 387 Phúc Tân, Lý Thái Tổ, Hoàn Kiếm, Hà Nội Cơ Sở 06: Số 4 Hàng Mành, Hàng Gai, Hoàn Kiếm, Hà Nội | Cơ Sở 07: Số 126, Thượng Đình, Khương Trung, Thanh Xuân, Hà Nội Cơ Sở 08: Số 261 Nguyễn Khang, Yên Hoà, Cầu Giấy, Hà Nội Cơ Sở 09: Số 68 Nguyễn Lương Bằng, Chợ Dừa, Đống Đa, Hà Nội Cơ Sở 10: Tầng 7, Plaschem 562 Nguyễn Văn Cừ, Long Biên, Hà Nội Cơ Sở 11: Số 72, Phố An Hòa, P. Mộ Lao, Hà Đông, Hà Nội Cơ Sở 12: Số 496, Thụy Khuê, Bưởi, Quận Tây Hồ, Hà Nội |