Git và những thuật ngữ cơ bản
Repository Nơi lưu trữ program và file ở trong hệ thống quản lý Version Trên Git chia repository thành 2 loại là Local repository và Remote repository Local repository Repository đang thao tác hiện tại, trong trường hợp thao tác chủ yếu trên máy tính cá nhân hoặc server phát triển gọi ...
Repository
Nơi lưu trữ program và file ở trong hệ thống quản lý Version
Trên Git chia repository thành 2 loại là Local repository và Remote repository
Local repository
Repository đang thao tác hiện tại, trong trường hợp thao tác chủ yếu trên máy tính cá nhân hoặc server phát triển gọi là local repository
Ngoài ra, có thể sao chép repository từ remote repository và xây dựng môi trường trên máy tính cá nhân hoặc server
Remote repository
Repository nằm ngoài, có thể thao tác thông qua local repository
Có thể sử dụngg trong trường hợp nhiều người thao tác , public trên internet
Working tree
Nơi user edit, tạo file mới
Index
Nơi bảo trì trạng thái sau khi edit trên working tree là đối tượng tiếp theo trước khi commit lên repository
Branch
Dùng để phân nhánh và ghi chép lịch sử. Nhánh đã chia không bị ảnh hưởng của nhánh khác nên có thể cùng có nhiều thay đổi trong repository giống nhau
Trên Git có 3 loại local branch, remote branch, remote tracking branch
Local branch: Branch có thể quản lý trong local repository
Remote branch: Branch ở trong remote repository
Remote tracking branch: Branch để local repository tracking (theo dõi) remote branch. Ví dụ origin/master biểu thị cho việc đang tracking branch master có ở remote repository gọi là origin
Check out
Triển khai branch ở repository lên working tree
Trên Git không chỉ branch mà tag, Specific commit, branch của remote repository cũng có thể check out
Tag
Tên được gắn vào để có thể dễ dàng tham chiếu commit
Commit
Message gắn vào khi thay đổi file
Revision
Hash value được tạo mỗi lần commit
Trên Git sử dụng hash value và thực hiện quản lý theo thế hệ
HEAD
Từ chỉ định commit mới nhất của branch đang check out hiện tại
FETCH_HEAD
Từ chỉ định commit mới nhất của remote branch đã lấy cuối cùng
ORIG_HEAD
Từ chỉ giá trị HEAD trước đó
MERGE_HEAD
Được tạo ra trong quá trình trộn, ghi lại commit trộn branch
Workflow cơ bản
Tạo repository Tạo file và edit (working tree) Ghi chép lên index Commit lên repository
Thiết lập ban đầu
Tạo repository
#tạo repository git init ls a . .. .git #folder và file được tạo cd .git ls HEAD description info refs config hooks objects
Tạo địa chỉ và tên sử dụng trên Git
#thiết lập global git config --global user.name "username" git config --global user.email "email" #repository git config user.name "username" git config user.email "email"
Command cơ bản
Ghi file lên index
git add filename #chỉ định current directory git add . #ghi tất cả file git add --all
Commit thay đổi lên local repository
Commit thay đổi của file đã ghi lên index vào repository
#commit git commit -m 'message' #ghi từ working tree lên index và commit git commit -am 'message' #thay đổi message commit git commit --amend
Out put sự khác biệt
Xác nhận sự khác biệt của index với working tree
git diff #sự khác biệt của file chỉ định git diff filename #sự khác biệt giữa branch và commit git diff branch 1 branch 2 #sự khác biệt giữa branch checkout và index git diff --cached
Hiển thị Commit log
#out put Commit log git log #tóm lược và out put commit log git shortlog #out put commit log trên 1 dòng git log --oneline
Xác nhận trạng thái Local repository và working tree
git status
Hiển thị liên quan đến commit
- On branch master * Commit ở trạng thái này sẽ được commit vào branch master
- Nothing to commit * Không có thay đổi đối với working tree và index
- Changes to be committed * File đang hiển thị là đối tượng commit tiếp theo
- Changed but not updated * Đang được thay đổi trên working tree nhưng thay đổi đó không được ghi trên index
- Untracked files * Tồn tại trên working tree nhưng không phải đối tượng quản lý của git
Hiển thị liên quan đến trạng thái của file
- New file * File đã được hiển thị mới trên index
- Modified * Biểu thị việc đã được thay đổi trạng thái từ working tree và index
- Renamed * Hiển thị trong trường hợp di chuyển file, thay đổi tên file
- Deleted * Được hiển thị trong trường hợp xóa file
- Both modified * Hiển thị đối với file trong trường hợp bị mất khi merge và rebase, thay đổi được thêm vào nhiều branch
- Unmerged * Hiển thị khi nằm ngoài both modified ra trong trường hợp bị mất khi merge và rebase
Di chuyển, thay đổi/xóa file
#di chuyển, thay đổi git mv #xóa git rm
Local repository, index quay trở lại trạng thái ban đầu
#quay lại trạng thái index, working tree,tham chiếu của HEAD git reset --hard #chỉ thay đổi tham chiếu của HEAD git reset --soft #thay đổi tham chiếu của HEAD và index. Default git reset git reset -mixed
Làm sạch working free
#xóa file không được quản lý trên repository git clean -f #xác nhận file được xóa git clean -n #xóa Directory git clean -d
Tìm kiếm string đặc định
git grep XXX
Hiển thị nội dung commit
git show
Trường hợp dùng remote repository
Tạo bản sao remote repository
git clone remote repository
Ghi/ thay đổi/ xóa remote repository
#ghi git remote add tên repository path #thay đổi git remote update #thay đổi repository đặc định git remote update tên repository #xóa git remote rm tên repository #xóa branch không tồn tại git remote prune
Reflection dữ liệu remote repository lên local repository
#chỉ định, Reflection remote repository và branch git pull origin remote branch
Về command git pull
Command git pull là sự kết hợp giữa command git fetch và git merge
Lấy dữ liệu của repository từ remote repository
#chỉ định branch ở trạng thái repository đã ghi git fetch origin remote repository
Dữ liệu đã lấy được check out như FETCH_HEAD
Sự khác nhau giữa fetch và remote update
- Fetch * Lấy thay đổi ở Branch unit
- Remote update * Lấy thay đổi ở repository unit
Trộn branch
#chỉ định và trộn branch git merge tên branch #chỉ định và trộn commit message git merge tên branch -m 'message' Gửi dữ liệu của local repository đến remote repository #gửi branch「master」đến remote repository「origin」 git push origin tên local branch #chỉ định branch của nơi Reflection git push origin tên local branch: tên remote branch
Trường hợp git push lỗi
- Trường hợp có commit chỉ ở repository
- Trường hợp remote branch đang được check out
Tạo, xác nhận, thay đổi, xóa branch
#tạo trên local repository git branch tên branch #xác nhận local branch git branch #xác nhận Remote tracking branch git branch -r #xác nhận commit mới nhất của mỗi branch git branch -v #thay đổi tên branch git branch -m tên branch (old) tên branch (new) #xóa branch git branch -d tên branch #xóa remote branch (sau khi đã xóa local branch) git push origin : tên branch
Check out của branch
git checkout tên branch
Có sự thay đổi trên working free và index,check out thì sự thay đổi cứ giữ như thế được Reflection lên branch khác
Tuy nhiên trong sẽ bị lỗi trong trường hợp có sự thay đổi ở file giống nhau trên branch của nơi check out
Gắn tag
#danh sách tag git tag #gắn tag git tag tên tag Revision #gắn message vào tag git tag -m ‘message’ #Reflection lên remote git push origin tên tag #xóa tag git tag -d tên tag #hiển thị tag gần đây nhất git describe
Compliance commit của branch đang check out trên branch đã chỉ định
git rebase tên branch
Trong trường hợp check out từ branch master sang branch test và đã edit, ghi, commit và rebase thì commit của branch test trên HEAD của branch master sẽ compliance
Sự khác nhau giữa merge và rebase
- Merge * Không thay đổi commit trên branch đang check out mà merge các branch
- Rebase * Compliance commit của branch đang check out ở commit mới nhất của branch đã chỉ định
- Tóm lại merge và rebase khác nhau ở commit
Command thuận tiện
Tạo snap shot của commit chỉ định
git archive --format= Format name --prefix= tên file sau khi triển khai tên commit > tên file
Lưu đồng thời trạng thái commit
#lưu git stash #gắn message và lưu git stash save message #hiển thị list đã lưu git stash list #quay lại nội dung đã lưu git stash pop #xóa tất cả nội dung đã lưu git stash clear
Kiểm tra commit không bao gồm trong branch
git cherry -v nguồn điều tra nơi điều tra
Lấy commit đặc định vào branch
git cherry-pick commit muốn lấy
Chỉ định vị trí bug nhập vào
git bisect start git bisect good git bisect bad #chạy tự động git bisect run
Làm sạch object của repository
git gc
Hiển thị chuỗi thời gian của lịch sử commit
git reflog
Refspec là gì?
Refspec là link branch giữa local repository với remote repository
git push origin refs/hands/remote branch (nguồn tham chiếu):refs/hands/local branch(nơi tham chiếu)
Ngoài ra cũng có thể chỉ định config