Skip to content

hprobotic/git-tips

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 

Repository files navigation

git-tips

Tuyển tập git-tips, bạn muốn đóng góp thêm? Vui lòng xem chi tiết contributing.md

English | 中文 | Русский | 한국어 | Tiếng Việt

Công cụ:

P.S: Tất cả các câu lệnh dưới đây đã được kiểm tra bằng git version 2.7.4 (Apple Git-66).

Sử dụng

git help everyday

Show helpful guides that come with Git

git help -g

Tìm kiếm thay đổi bằng nội dung

git log -S'<a term in the source>'

Đồng bộ với remote, ghi đè tất cả những thay đổi hiện tại

git fetch origin && git reset --hard origin/master && git clean -f -d

Danh sách tất cả các tệp trong 1 commit

git ls-tree --name-only -r <commit-ish>

Git reset first commit

git update-ref -d HEAD

Danh sách tất cả tệp đã bị conflict

git diff --name-only --diff-filter=U

Danh sách tất cả các file đã bị thay đổi trong 1 commit

git diff-tree --no-commit-id --name-only -r <commit-ish>

Tất cả những thay đổi chưa được ghi nhận kể từ commit cuối cùng

git diff

Những thay đổi đã được ghi nhận

git diff --cached

Cách khác:

git diff --staged

Xem mọi thay đổi trên tệp kể từ commit cuối

git diff HEAD

Danh sách tất cả các branch đã được merged vào master

git branch --merged master

Quay lại branch gần nhất

git checkout -

Cách khác:

git checkout @{-1}

Xóa tất cả branch đã được merged vào master

git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d

Cách khác:

git branch --merged master | grep -v '^\*\|  master' | xargs -n 1 git branch -d # will not delete master if master is not checked out

Danh sách tất cả branch và thông tin cơ bản: upstream, commit gần nhất

git branch -vv

Thông tin về upstream của branch

git branch -u origin/mybranch

Xóa một branch trên máy

git branch -d <local_branchname>

Xóa một remote branch

git push origin --delete <remote_branchname>

Cách khác:

git push origin :<remote_branchname>

Xóa một tag trên máy

git tag -d <tag-name>

Xóa một remote tag

git push origin :refs/tags/<tag-name>

Undo local changes with the last content in head

git checkout -- <file_name>

Revert: Hủy bỏ một commit bằng cách tạo thêm 1 commit

git revert <commit-ish>

Reset: Hủy bỏ tất cả commit, khuyên dùng cho branch cá nhân

git reset <commit-ish>

Sửa lại commit message gần vừa tạo

git commit -v --amend

Xem lịch sử commit riêng branch hiện tại

git cherry -v master

Người thay đổi.

git commit --amend --author='Author Name <email@address.com>'

Reset tác giả, sau khi tác giả đã bị thay đổi trong cấu hình toàn hệ thống.

git commit --amend --reset-author --no-edit

Thay đổi đường dẫn remote

git remote set-url origin <URL>

Lấy danh sách của tất các remote

git remote

Cách khác:

git remote show

Lấy danh sách branch trên local và remote

git branch -a

Chỉ lấy danh sách branch trên remote

git branch -r

Lưu thay đổi 1 phần của tệp, thay vì toàn bộ tệp

git add -p

Lấy câu lệnh git tự động hoàn thành

curl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc

Những gì đã thay đổi trong 2 tuần gần nhất?

git log --no-merges --raw --since='2 weeks ago'

Cách khác:

git whatchanged --since='2 weeks ago'

Xem tất cả những commit đã được tạo từ khi fork từ master

git log --no-merges --stat --reverse master..

Chọn các commit từ nhiều branch sử dụng cherry-pick

git checkout <branch-name> && git cherry-pick <commit-ish>

Tìm cách branch có chứa commit-hash

git branch -a --contains <commit-ish>

Cách khác:

git branch --contains <commit-ish>

Gõ tắt Git

git config --global alias.<handle> <command> 
git config --global alias.st status

Lưu trạng thái hiện tại của các tệp mà không commit

git stash

Cách khác:

git stash save

Lưu trạng thái hiện tại của những thay đổi chưa được lưu vào những tệp đã được theo dõi

git stash -k

Cách khác:

git stash --keep-index
git stash save --keep-index

Lưu trạng thái hiện tại bao gồm cả tệp chưa được theo dõi

git stash -u

Cách khác:

git stash save -u
git stash save --include-untracked

Lưu trạng thái hiện tại với message

git stash save <message>

Lưu trạng thái hiện tại của tất cả file (bị bỏ qua, chưa được theo dõi, và được theo dõi)

git stash -a

Cách khác:

git stash --all
git stash save --all

Xem danh sách tất cả các lưu tạm

git stash list

Áp dụng lưu tạm bất kỳ mà không xóa nó hỏi danh sách lưu tạm

git stash apply <stash@{n}>

Áp dụng lưu tạm cuối cùng và xóa nó khỏi danh sách lưu tạm

git stash pop

Cách khác:

git stash apply stash@{0} && git stash drop stash@{0}

Xóa tất cả lưu tạm

git stash clear

Cách khác:

git stash drop <stash@{n}>

Lấy 1 file từ 1 lưu tạm

git checkout <stash@{n}> -- <file_path>

Cách khác:

git checkout stash@{0} -- <file_path>

Hiển thị danh sách tệp được theo dõi

git ls-files -t

Hiển thị danh sách tệp chưa được theo dõi

git ls-files --others

Hiển thị danh sách tệp bị bỏ qua

git ls-files --others -i --exclude-standard

Tạo nhánh làm việc mới từ một repo (git 2.5)

git worktree add -b <branch-name> <path> <start-point>

Tạo một nhánh làm việc mới từ trạng thái HEAD

git worktree add --detach <path> HEAD

Hủy bỏ theo dõi tệp mà không xóa nó

git rm --cached <file_path>

Cách khác:

git rm --cached -r <directory_path>

Trước khi xóa những tệp/ thư mục chưa được theo dõi, thực thi việc lấy danh sách các tệp/ thư mục này

git clean -n

Force: Xóa bỏ tất cả tệp chưa được theo dõi

git clean -f

Force: Xóa bỏ tất cả thư mục chưa được theo dõi

git clean -f -d

Cập nhật tất cả submodule

git submodule foreach git pull

Cách khác:

git submodule update --init --recursive
git submodule update --remote

Hiển thị tất cả các commit chưa được merged vào master của branch hiện tại

git cherry -v master

Cách khác:

git cherry -v master <branch-to-be-merged>

Đổi tên một branch

git branch -m <new-branch-name>

Cách khác:

git branch -m [<old-branch-name>] <new-branch-name>

Rebases 'feature' thành 'master' và merges nó vào master

git rebase master feature && git checkout master && git merge -

Khóa branch master

git archive master --format=zip --output=master.zip

Thay đổi commit gần nhất mà không thay đổi commit message

git add --all && git commit --amend --no-edit

Truy vấn đến cho các nhánh remote mà nó đã bị xóa trong remote.

git fetch -p

Cách khác:

git remote prune origin

Truy xuất commit-hash của bản sửa đổi ban đầu.

 git rev-list --reverse HEAD | head -1

Cách khác:

git rev-list --max-parents=0 HEAD
git log --pretty=oneline | tail -1 | cut -c 1-40
git log --pretty=oneline --reverse | head -1 | cut -c 1-40

Xem cây commit theo dạng đồ họa

git log --pretty=oneline --graph --decorate --all

Cách khác:

gitk --all

Deploy một thư mục đã được theo dõi vào gh-pages

git subtree push --prefix subfolder_name origin gh-pages

Thêm một dự án vào repo sử dụng subtree

git subtree add --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git master

Lấy thay đổi mới nhất trong repo của bạn cho một dự án đã được liên kết dùng subtree

git subtree pull --prefix=<directory_name>/<project_name> --squash git@github.com:<username>/<project_name>.git master

Xuất một branch với lịch sử ra một tệp

git bundle create <file> <branch-name>

Nhập từ một bundle

git clone repo.bundle <repo-dir> -b <branch-name>

Lấy tên của branch hiện tại

git rev-parse --abbrev-ref HEAD

Bỏ qua 1 file trong commit (e.g. Changelog).

git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog

Lưu tạm các thay đổi trước khi rebase

git rebase --autostash

Cập nhật yêu cầu tích hợp bằng ID vào local branch

git fetch origin pull/<id>/head:<branch-name>

Cách khác:

git pull origin pull/<id>/head:<branch-name>

Hiển thị tag gần nhất trên branch hiện tại.

git describe --tags --abbrev=0

Hiển thị thay đổi tổng quát.

git diff --word-diff

Hiển thị thay đổi sử dụng các công cụ.

git difftool -t <commit1> <commit2> <path>

Không xem xét các thay đổi cho tệp đã theo dõi.

git update-index --assume-unchanged <file_name>

Hủy assume-unchanged.

git update-index --no-assume-unchanged <file_name>

Dọn dẹp các tệp từ .gitignore.

git clean -X -f

Khôi phục tệp đã bị xóa.

git checkout <deleting_commit>^ -- <file_path>

Khôi phục một file từ một commit-hash nhất định

git checkout <commit-ish> -- <file_path>

Luôn rebase thay vì tích hợp khi pull.

git config --global pull.rebase true

Cách khác:

#git < 1.7.9
git config --global branch.autosetuprebase always

Danh sách tất cả các lối tắt và cấu hình.

git config --list

Cấu hình git phân biệt chữ hoa chữ thường

git config --global core.ignorecase false

Thêm trình soạn thảo của bạn.

git config --global core.editor '$EDITOR'

Tự động sửa lỗi chính tả.

git config --global help.autocorrect 1

Kiểm tra nếu thay đổi đã là một phần của xuất bản.

git name-rev --name-only <SHA-1>

Dry run. (tất cả các câu lệnh hộ trợ dry-run được gắn cờ nên sử dụng.)

git clean -fd --dry-run

Gán commit của bạn là 1 fix của commit trước đó.

git commit --fixup <SHA-1>

Squash fixup commits normal commits.

git rebase -i --autosquash

Bỏ qua khu vực dàn trong quá trình commit.

git commit --only <file_path>

Interactive staging.

git add -i

Danh sách tệp bị bỏ qua.

git check-ignore *

Trạng thái của tệp bị bỏ qua.

git status --ignored

Các commit ở Branch1 mà không có ở Branch2

git log Branch1 ^Branch2

Danh sách n commit gần nhất

git log -<n>

Cách khác:

git log -n <n>

Reuse recorded resolution, record and reuse previous conflicts resolutions.

git config --global rerere.enabled 1

Mở tất cả những tệp bị conflict bằng trình soạn thảo.

git diff --name-only | uniq | xargs $EDITOR

Đếm số đối tượng và dung lượng ổ đĩa của file đã giải nén

git count-objects --human-readable

Xoá tất cả các đối tượng không thể truy cập từ cơ sở dữ liệu đối tượng.

git gc --prune=now --aggressive

Chuyển đến repo của bạn trên gitweb bằng trình duyệt.

git instaweb [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]

View the GPG signatures in the commit log

git log --show-signature

Xóa bỏ mục trong cấu hình toàn hệ thống.

git config --global --unset <entry-name>

Khởi tạo một branch mới không có lịch sử

git checkout --orphan <branch_name>

Xem tệp của branch khác.

git show <branch_name>:<file_name>

Chỉ liệt kê commit gốc và đã merge.

git log --first-parent

Thay đổi 2 commit với một interactive rebase.

git rebase --interactive HEAD~2

Danh sách tất cả branch là WIP

git checkout master && git branch --no-merged

Tìm lỗi với tìm kiếm nhị phân

git bisect start                    # Search start 
git bisect bad                      # Set point to bad commit 
git bisect good v2.6.13-rc2         # Set point to good commit|tag 
git bisect bad                      # Say current state is bad 
git bisect good                     # Say current state is good 
git bisect reset                    # Finish search 

Bỏ qua pre-commitcommit-msg khi commit

git commit --no-verify

Danh sách các commit và thay đổi cho 1 file nhất định (kể cả file đã đổi tên)

git log --follow -p -- <file_path>

Clone 1 branch duy nhất

git clone -b <branch-name> --single-branch https://github.com/user/repo.git

Tạo và chuyển qua branch mới ngay lập tức

git checkout -b <branch-name>

Cách khác:

git branch <branch-name> && git checkout <branch-name>

Bỏ qua kiểu thay đổi tệp trên các commit

git config core.fileMode false

Tắt giao diện màu trong terminal

git config --global color.ui false

Chỉ định cấu hình màu theo branch, diff..

git config --global <specific command e.g branch, diff> <true, false or always>

Hiển thị tất cả các branch đã xếp đặt trong các commit gần đây

git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/

Tìm các dòng thỏa điều kiện (regex hoặc chuỗi) trong những tệp được theo dõi

git grep --heading --line-number 'foo bar'

Clone một sao chép bóng của repo

git clone https://github.com/user/repo.git --depth 1

Tìm kiếm lịch sử commit trên toàn bộ branch bằng một từ khóa cho trước

git log --all --grep='<given-text>'

Lấy commit đầu tiên trong một branch (từ master)

git log master..<branch-name> --oneline | tail -1

Hủy lưu thay đổi tệp

git reset HEAD <file-name>

Đẩy lên remote repo và bỏ qua mọi vật cản

git push -f <remote-name> <branch-name>

Thêm tên Remote

git remote add <remote-nickname> <remote-url>

Hiển thị tác giả, thời gian và bản ghi gần nhất lên từng dòng của 1 file cho trước

git blame <file-name>

Nhóm các commit theo các tác giả và tiêu đề

git shortlog

Forced push nhưng vẫn đảm bảo bạn không ghi đè lên những thay đổi của người khác

git push --force-with-lease <remote-name> <branch-name>

Hiển số dòng đóng góp của một tác giả

git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += <!-- @doxie.inject start -->; subs += <!-- @doxie.inject end -->; loc += <!-- @doxie.inject start --> - <!-- @doxie.inject end --> } END { printf "added lines: %s removed lines: %s total lines: %s
", add, subs, loc }' -

Cách khác:

git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += <!-- @doxie.inject start -->; subs += <!-- @doxie.inject end -->; loc += <!-- @doxie.inject start --> - <!-- @doxie.inject end --> } END { printf "added lines: %s, removed lines: %s, total lines: %s
", add, subs, loc }' - # on Mac OSX

Revert: Hoàn nguyên toàn bộ một merge

git revert -m 1 <commit-ish>

Số lượng commit trong 1 branch

git rev-list --count <branch-name>

Gõ tắt: git undo

git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'

Thêm các ghi chú

git notes add -m 'Note on the previous commit....'

Hiển thị tất cả git-notes

git log --show-notes='*'

Áp dụng commit từ một repo khác

git --git-dir=<source-dir>/.git format-patch -k -1 --stdout <SHA1> | git am -3 -k

Fetch từ một ref nhất định

git fetch origin master:refs/remotes/origin/mymaster

Tìm gốc chung của 2 nhánh

diff -u <(git rev-list --first-parent BranchA) <(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1

Danh sách commit chưa push

git log --branches --not --remotes

Cách khác:

git log @{u}..
git cherry -v

Thêm mọi thứ, nhưng bỏ qua thay đổi khoảng trắng

git diff --ignore-all-space | git apply --cached

Chỉnh [local/global] git config

git config [--global] --edit

Xem blame trong một khoảng nhất định

git blame -L <start>,<end>

Xem một biến Git logical

git var -l | <variable>

Tệp vá lỗi được định dạng sẵn.

git format-patch -M upstream..topic

Lấy tên repo.

git rev-parse --show-toplevel

Xem logs trong một khoảng ngày tháng

git log --since='FEB 1 2017' --until='FEB 14 2017'

Xem logs ngoại trừ tác giả

git log --perl-regexp --author='^((?!excluded-author-regex).*)

Tạo ra một bản tóm tắt các thay đổi đang chờ

git request-pull v1.0 https://git.ko.xz/project master:for-linus

Danh sách các ref trong remote repository

git ls-remote git://git.kernel.org/pub/scm/git/git.git

Sao lưu những file không được theo dõi.

git ls-files --others -i --exclude-standard | xargs zip untracked.zip

Danh sách các lệnh gõ tắt

git config -l | grep alias | sed 's/^alias\.//g'

Cách khác:

git config -l | grep alias | cut -d '.' -f 2

Hiển thị trạng thái git ở dạng rút gọn

git status --short --branch

Quay về một commit tại 1 thời điểm nhất định trong quá khứ

git checkout master@{yesterday}

Đẩy một branch từ local lên remote và theo dõi

git push -u origin <branch_name>

About

Những lệnh git cơ bản

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published