Tham khảo: http://guides.beanstalkapp.com/version-control/common-git-commands.html
Làm việc với Git trên dòng lệnh có thể khó khăn. Để giải quyết vấn đề đó, chúng tôi đã tổng hợp một danh sách các lệnh Git phổ biến, ý nghĩa của mỗi lệnh và cách sử dụng chúng. Chúng tôi hy vọng rằng điều này làm cho Git dễ sử dụng hơn hàng ngày.
Git có nhiều ứng dụng khách tuyệt vời cho phép bạn sử dụng Git mà không cần dòng lệnh. Biết được những hành động nào mà khách hàng đang thực hiện trong nền có lợi để hiểu cách Git hoạt động. Nếu bạn đang bắt đầu với Git, hãy xem hướng dẫn tuyệt vời của chúng tôi về chủ đề này .
Làm việc với kho lưu trữ cục bộ
git init
Lệnh này biến một thư mục thành một kho lưu trữ Git trống. Đây là bước đầu tiên trong việc tạo một kho lưu trữ. Sau khi chạy git init, có thể thêm và cam kết các tệp / thư mục.
Sử dụng:
# change directory to codebase
$ cd /file/path/to/code
# make directory a git repository
$ git init
Trong thực tế:
# change directory to codebase
$ cd /Users/computer-name/Documents/website
# make directory a git repository
$ git init
Initialized empty Git repository in /Users/computer-name/Documents/website/.git/
git add
Thêm các tệp trong vùng sắp xếp cho Git. Trước khi một tệp có sẵn để cam kết vào một kho lưu trữ, tệp cần được thêm vào chỉ mục Git (khu vực dàn dựng). Có một số cách khác nhau để sử dụng git add, bằng cách thêm toàn bộ thư mục, các tệp cụ thể hoặc tất cả các tệp chưa được phân giai đoạn.
Sử dụng:
$ git add <file or directory name>
Trong thực tế:
# To add all files not staged:
$ git add .
# To stage a specific file:
$ git add index.html
# To stage an entire directory:
$ git add css
git commit
Ghi lại những thay đổi được thực hiện đối với tệp vào kho lưu trữ cục bộ. Để dễ dàng tham khảo, mỗi cam kết có một ID duy nhất.
Cách tốt nhất là bao gồm một thông báo với mỗi cam kết giải thích những thay đổi được thực hiện trong một cam kết. Thêm thông báo cam kết giúp tìm ra một thay đổi cụ thể hoặc hiểu các thay đổi.
Sử dụng:
# Adding a commit with message
$ git commit -m “Commit message in quotes”
Trong thực tế:
$ git commit -m “My first commit message”
[SecretTesting 0254c3d] My first commit message
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 homepage/index.html
git status
Lệnh này trả về trạng thái hiện tại của kho lưu trữ.
trạng thái git sẽ trả về nhánh làm việc hiện tại. Nếu một tệp nằm trong vùng dàn dựng, nhưng không được cam kết, nó sẽ hiển thị với trạng thái git . Hoặc, nếu không có thay đổi, nó sẽ không trả lại gì để cam kết, thư mục làm việc sạch sẽ.
Sử dụng:
$ git status
Trong thực tế:
# Message when files have not been staged (git add)
$ git status
On branch SecretTesting
Untracked files:
(use “git add <file>…” to include in what will be committed)
homepage/index.html
# Message when files have been not been committed (git commit)
$ git status
On branch SecretTesting
Your branch is up-to-date with ‘origin/SecretTesting’.
Changes to be committed:
(use “git reset HEAD <file>…” to unstage)
new file: homepage/index.html
# Message when all files have been staged and committed
$ git status
On branch SecretTesting
nothing to commit, working directory clean
git config
Với Git, có nhiều cấu hình và cài đặt có thể. git config là cách gán các cài đặt này. Hai cài đặt quan trọng là user.name và user.email. Các giá trị này đặt địa chỉ email và tên cam kết sẽ được lấy từ máy tính cục bộ. Với git config , cờ –global được sử dụng để ghi cài đặt vào tất cả các kho lưu trữ trên máy tính. Nếu không có – cài đặt cờ –global sẽ chỉ áp dụng cho kho lưu trữ hiện tại mà bạn đang ở.
Có nhiều biến khác có sẵn để chỉnh sửa trong git config . Từ chỉnh sửa kết quả đầu ra màu đến thay đổi hành vi của trạng thái git . Tìm hiểu về cài đặt cấu hình git trong tài liệu Git chính thức .
Sử dụng:
$ git config <setting> <command>
Trong thực tế:
# Running git config globally
$ git config –global user.email “my@emailaddress.com”
$ git config –global user.name “Brian Kerr”
# Running git config on the current repository settings
$ git config user.email “my@emailaddress.com”
$ git config user.name “Brian Kerr”
git branch
Để xác định nhánh nào của kho lưu trữ cục bộ, hãy thêm một nhánh mới hoặc xóa một nhánh.
Sử dụng:
# Create a new branch
$ git branch <branch_name>
# List all remote or local branches
$ git branch -a
# Delete a branch
$ git branch -d <branch_name>
Trong thực tế:
# Create a new branch
$ git branch new_feature
# List branches
$ git branch -a
* SecretTesting
new_feature
remotes/origin/stable
remotes/origin/staging
remotes/origin/master -> origin/SecretTesting
# Delete a branch
$ git branch -d new_feature
Deleted branch new_feature (was 0254c3d).
git checkout
Để bắt đầu làm việc trong một chi nhánh khác, hãy sử dụng git checkout để chuyển đổi các chi nhánh.
Sử dụng:
# Checkout an existing branch
$ git checkout <branch_name>
# Checkout and create a new branch with that name
$ git checkout -b <new_branch>
Trong thực tế:
# Switching to branch ‘new_feature’
$ git checkout new_feature
Switched to branch ‘new_feature’
# Creating and switching to branch ‘staging’
$ git checkout -b staging
Switched to a new branch ‘staging’
git merge
Tích hợp các nhánh với nhau. git merge kết hợp các thay đổi từ nhánh này sang nhánh khác. Ví dụ: hợp nhất các thay đổi được thực hiện trong một nhánh dàn vào nhánh ổn định.
Sử dụng:
# Merge changes into current branch
$ git merge <branch_name>
Trong thực tế:
# Merge changes into current branch
$ git merge new_feature
Updating 0254c3d..4c0f37c
Fast-forward
homepage/index.html | 297 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 297 insertions(+)
create mode 100644 homepage/index.html
Làm việc với kho lưu trữ từ xa
git remote
Để kết nối một kho lưu trữ cục bộ với một kho lưu trữ từ xa. Một kho lưu trữ từ xa có thể được đặt tên để tránh phải nhớ URL của kho lưu trữ.
Sử dụng:
# Add remote repository
$ git remote <command> <remote_name> <remote_URL>
# List named remote repositories
$ git remote -v
Trong thực tế:
# Adding a remote repository with the name of beanstalk
$ git remote add origin git@account_name.git.beanstalkapp.com:/acccount_name/repository_name.git
# List named remote repositories
$ git remote -v
origin git@account_name.git.beanstalkapp.com:/acccount_name/repository_name.git (fetch)
origin git@account_name.git.beanstalkapp.com:/acccount_name/repository_name.git (push)
Lưu ý: Kho lưu trữ từ xa có thể có bất kỳ tên nào. Cách đặt tên kho lưu trữ từ xa là ‘origin’.
git clone
Để tạo bản sao làm việc cục bộ của kho lưu trữ từ xa hiện có, hãy sử dụng git clone để sao chép và tải kho lưu trữ xuống máy tính. Sao chép tương đương với git init khi làm việc với kho lưu trữ từ xa. Git sẽ tạo một thư mục cục bộ với tất cả các tệp và lịch sử kho lưu trữ.
Sử dụng:
$ git clone <remote_URL>
Trong thực tế:
$ git clone git@account_name.git.beanstalkapp.com:/acccount_name/repository_name.git
Cloning into ‘repository_name’…
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (5/5), 3.08 KiB | 0 bytes/s, done.
Checking connectivity… done.
git pull
Để tải phiên bản mới nhất của kho lưu trữ, hãy chạy git pull . Thao tác này kéo các thay đổi từ kho lưu trữ từ xa sang máy tính cục bộ.
Sử dụng:
$ git pull <branch_name> <remote_URL/remote_name>
Trong thực tế:
# Pull from named remote
$ git pull origin staging
From account_name.git.beanstalkapp.com:/account_name/repository_name
* branch staging -> FETCH_HEAD
* [new branch] staging -> origin/staging
Already up-to-date.
# Pull from URL (not frequently used)
$ git pull git@account_name.git.beanstalkapp.com:/acccount_name/repository_name.git staging
From account_name.git.beanstalkapp.com:/account_name/repository_name
* branch staging -> FETCH_HEAD
* [new branch] staging -> origin/staging
Already up-to-date.
git push
Gửi các cam kết cục bộ đến kho lưu trữ từ xa. git push yêu cầu hai tham số: kho lưu trữ từ xa và nhánh mà push dành cho.
Sử dụng:
$ git push <remote_URL/remote_name> <branch>
# Push all local branches to remote repository
$ git push —all
Trong thực tế:
# Push a specific branch to a remote with named remote
$ git push origin staging
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 734 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To git@account_name.git.beanstalkapp.com:/acccount_name/repository_name.git
ad189cb..0254c3d SecretTesting -> SecretTesting
# Push all local branches to remote repository
$ git push –all
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 373 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To git@account_name.git.beanstalkapp.com:/acccount_name/repository_name.git
0d56917..948ac97 master -> master
ad189cb..0254c3d SecretTesting -> SecretTesting
Lệnh Git nâng cao
git stash
Để lưu các thay đổi được thực hiện khi chúng không ở trạng thái cam kết chúng vào kho lưu trữ. Điều này sẽ lưu trữ công việc và cung cấp một thư mục làm việc sạch sẽ. Ví dụ: khi làm việc trên một tính năng mới chưa hoàn thành nhưng cần chú ý đến một lỗi khẩn cấp.
Sử dụng:
# Store current work with untracked files
$ git stash -u
# Bring stashed work back to the working directory
$ git stash pop
Trong thực tế:
# Store current work
$ git stash -u
Saved working directory and index state WIP on SecretTesting: 4c0f37c Adding new file to branch
HEAD is now at 4c0f37c Adding new file to branch
# Bring stashed work back to the working directory
$ git stash pop
On branch SecretTesting
Your branch and ‘origin/SecretTesting’ have diverged,
and have 1 and 1 different commit each, respectively.
(use “git pull” to merge the remote branch into yours)
Changes not staged for commit:
(use “git add <file>…” to update what will be committed)
(use “git checkout — <file>…” to discard changes in working directory)
modified: index.html
no changes added to commit (use “git add” and/or “git commit -a”)
Dropped refs/stash@{0} (3561897724c1f448ae001edf3ef57415778755ec)
git log
Để hiển thị lịch sử cam kết theo thứ tự thời gian cho một kho lưu trữ. Điều này giúp cung cấp bối cảnh và lịch sử cho một kho lưu trữ. git log có sẵn ngay lập tức trên một kho lưu trữ được nhân bản gần đây để xem lịch sử.
Sử dụng:
# Show entire git log
$ git log
# Show git log with date pameters
$ git log –<after/before/since/until>=<date>
# Show git log based on commit author
$ git log –<author>=”Author Name”
Trong thực tế:
# Show entire git log
$ git log
commit 4c0f37c711623d20fc60b9cbcf393d515945952f
Author: Brian Kerr <my@emailaddress.com>
Date: Tue Oct 25 17:46:11 2016 -0500
Updating the wording of the homepage footer
commit 0254c3da3add4ebe9d7e1f2e76f015a209e1ef67
Author: Ashley Harpp <my@emailaddress.com>
Date: Wed Oct 19 16:27:27 2016 -0500
My first commit message
# Show git log with date pameters
$ git log –before=”Oct 20″
commit 0254c3da3add4ebe9d7e1f2e76f015a209e1ef67
Author: Ashley Harpp <my@emailaddress.com>
Date: Wed Oct 19 16:27:27 2016 -0500
My first commit message
# Show git log based on commit author
$ git log –author=”Brian Kerr”
commit 4c0f37c711623d20fc60b9cbcf393d515945952f
Author: Brian Kerr <my@emailaddress.com>
Date: Tue Oct 25 17:46:11 2016 -0500
Updating the wording of the homepage footer
git rm
Loại bỏ các tệp hoặc thư mục khỏi chỉ mục làm việc (khu vực dàn dựng). Với git rm , có hai tùy chọn cần lưu ý: buộc và lưu vào bộ nhớ cache. Chạy lệnh với lực sẽ xóa tệp. Lệnh được lưu trong bộ nhớ cache sẽ xóa tệp khỏi chỉ mục làm việc. Khi xóa toàn bộ một thư mục, một lệnh đệ quy là cần thiết.
Sử dụng:
# To remove a file from the working index (cached):
$ git rm –cached <file name>
# To delete a file (force):
$ git rm -f <file name>
# To remove an entire directory from the working index (cached):
$ git rm -r –cached <directory name>
# To delete an entire directory (force):
$ git rm -r -f <file name>
Trong thực tế:
# To remove a file from the working index:
$ git rm –cached css/style.css
rm ‘css/style.css’
# To delete a file (force):
$ git rm -f css/style.css
rm ‘css/style.css’
# To remove an entire directory from the working index (cached):
$ git rm -r –cached css/
rm ‘css/style.css’
rm ‘css/style.min.css’
# To delete an entire directory (force):
$ git rm -r -f css/
rm ‘css/style.css’
rm ‘css/style.min.css’