Tài liệu tham khảo
■Cơ chế hoạt động
https://git-scm.com/book/vi/v1/Ph%C3%A2n-Nh%C3%A1nh-Trong-Git-Nh%C3%A1nh-L%C3%A0-G%C3%AC%3F
http://backlogtool.com/git-guide/vn/
http://git.mikeward.org/
■GUI tool:
http://git-scm.com/downloads/guis
■Tool học qua simulator
https://try.github.io/levels/1/challenges/1
http://pcottle.github.io/learnGitBranching/
Git Internals: Working directly with Git Objects
git hist
git cat-file -p
git cat-file -p
git cat-file -p // lấy 6 số đầu trong dãy hash của blob
Git Internals: The .git directory
ls -C .git
cat .git/config
cat .git/HEAD
lab 1:Kiểm Tra Cấu Hình
$ git config --list
user.name=Scott Chacon
user.email=schacon@gmail.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
lab 2: Cấu hình
Config user, email
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
$ git config user.name
Scott Chacon
Trình Soạn Thảo
$ git config --global merge.tool vimdiff
lab 3: Tạo dự án
mkdir sonnh
cd sonnh
git add hello.txt
git commit -m "First Commit"
lab 4: Kiểm tra trạng thái
git status
lab 5:Tạo thay đổi
echo abc > a.txt
echo xyz >> a.txt // thêm line vào cuối file
lab 6: Xem thay đổi vùng index (Staging Changes)
git add a.txt
git status
lab 7:Staging and Committing
git add b.txt
git commit -m "Changes for a and b"
git add c.txt
git commit - m "unretlated to c"
git status
lab 8:Committing Changes
git commit -a -m "commit message"
//-a all
//-m message
Using Vim for add message
Amending Commits
Để ko chia thành quá nhiều lần commit thì chúng ta sử dụng lệnh này
giúp cho log sáng sủa
git add hello.txt
git commit --amend -m "Add the same ticket-number fix"
git commit --amend -m "Nội dung message mới" // chỉ thay đổi message
lab9: HELP
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
Ví dụ:
$ git help config
lab 10: LOG
git log --pretty=oneline --max-count=2
git log --pretty=oneline --since='5 minutes ago'
git log --pretty=oneline --until='5 minutes ago'
git log --pretty=oneline --author=<your name>
git log --pretty=oneline --all
git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
lab 11:Aliases
Mở file .gitconfig
[alias]
co = checkout
ci = commit
st = status
br = branch
hist = log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
type = cat-file -t
dump = cat-file -p
lab12: Tạo TAG
git tag v1
git checkout v1
lab 13: Removing Commits from a Branch by Tag
git reset --hard tagName
--hard param: Phản ánh tới cả working directory, thay đổi cả những phần chưa commit
--soft: giữ phần chưa commit
lab 14:Delete tag
Remove the oops tag
git tab -d tagName
lab 15: Xem thay doi
lab 16:Undoing Local Changes (before staging)
Xóa bỏ các file chưa được add
git clean --force
// option -d giúp clean các thư mục
//-n option giúp show xem thay đổi
$ git clean -df
$ git checkout --
//or chỉ định name
$ git checkout abc file
lab 17: Phục hồi ở STAGE (before committing)
git reset HEAD badfile.txt
lab 18: Phục hồi khi đã lỡ COMMITED (chưa push)
$ git revert HEAD --no-edit
$ git reset --soft HEAD~1 // Bỏ 1 commit và giữ lại thay đổi hiện tại
$ git reset HEAD~1 --hard //bỏ 1 commit cả phần đã commit và cả phần đang thay đổi hiện tại
$ git reset --hard origin/branch //để reset lại local cho khớp với trên remote.
$ git reset --hard <hash>//hoặc chỉ định đến bản hash tường minh
lab 19: Phục hồi khi đã PUSH
$ git revert HEAD~1..HEAD
lab 20:Moving Files
mkdir lib
git mv hello.rb lib
git status
// or
mkdir lib
mv hello.rb lib
git add lib/hello.rb
git rm hello.rb
git commit -m "moving file"
lab20: Creating a Branch
git branch newBranch
git checkout -b greet
-b: create branch
List branch:
git branch -a
git branch -l
git branche -r
lab 21:switch Branches
git checkout greet
git checkout master
lab 22:Merging
merge development into master
git checkout master
git merge development
lab 23 Resolving Conflicts
Sau khi giải quyết conflict cần gọi lệnh sau để commit thay đổi
git add
git commit
lab 25 Show remote information
git remote
git remote show origin
git branch -r
Show all remote we have
git remote -v
Change name
git remote rename <old-name> <new-name>
origin -> enomemory
git remote add john http://dev.example.com/john.git
git clone URL
lab 26 FETCH
Lay ve origin/master
git checkout master
git fetch
Merge to local master
git merge origin/master
lab 27 PULL
Lấy và merge về Working tree
git pull
Bản chất tương đương:
git fetch
git merge origin/master
lab 28 :TRACKING
git branch --track localbranchA origin/branchA
git branch -a
git hist --max-count=2
CHÚ Ý TRACKING nhầm thì lúc push sẽ bị nhầm
cần dùng lệnh
git branch -vv //để show lại
//sau đó dùng lệnh thay đổi upstream để sửa
git branch -u DectBranch
lab 29: PUSH
$ git push origin --delete serverfix
lab 30:Bare Repositories
Không tạo ra vùng working index
cd ..
git clone --bare hello hello.git
ls hello.git
lab 31: STASH
Đây là một dạng bộ nhớ tạm dùng để lưu các thay đổi đang làm mà chưa commit, sau đó phục hồi code về nguyên trạng ban đầu trước khi có những thay đổi đó.
git stash
git stash list
Để phục hồi stash mới nhất vừa lưu nhưng không xoá nó:
git stash apply
Phục hồi và xóa khỏi stack stash
git stash pop
Để phục hồi một stash bất kì:
git stash apply stash@{1} (với stash@{1} là tên của stash đó)
Để huỷ bỏ một stash, dùng lệnh:
git stash drop stash@{1} (với `stash@{1} là tên stash cần xoá)
Xem chi tiết một stash:
git stash show -p stash@{0}
lab 32 tạo PATCH file
Patch là một hình thức đóng gói các thay đổi thành 1 file, sau đó gửi đến cho người cần nhận những thay đổi đó.
Ví dụ bạn cần viết một đoạn script để thay đổi một số thứ trong dự án và muốn gửi những thay đổi này cho một người khác mà không muốn commit lên repository (vì có thể đây chưa phải là những thay đổi chính xác, cần thử nghiệm trước,…), giải pháp là tạo ra file patch, và người nhận file chỉ việc apply file patch này vào mà không cần phải thực hiện thao tác pull code.
Để tạo một file patch từ những thay đổi hiện tại trong dự án:
git diff > tên-file.patch
Nếu những thay đổi của bạn có kèm theo các dữ liệu binary (hình ảnh, blah blah,… không phải text như code), thì phải thêm vào tham số full-index và binary như sau (với SVN hoặc TFS thì chả cần):
git diff --full-index --binary > tên-file.patch
Ở phía người nhận, nếu muốn apply các thay đổi này vào dự án thì dùng lệnh sau:
git apply tên-file.patch
Lab 33 Xem những commit chưa được push
Trong khi làm việc, có thể bạn tạo ra rất nhiều commit (tất nhiên là chưa push), nhưng lại không nhớ rõ là mình đã commit những gì, vào lúc nào, thì có thể dùng lệnh sau để liệt kê các commit đó:
git log origin/master..master
SQUASH
Nhóm 1 số commit lại thành 1 rồi merge
git merge --squash --edit