0%

工作中一些简单的 Git 应用实践

前言

最近笔者在整理项目开发文档,深知代码版本管理的重要性,而 Git 作为代码版本管理的扛把子工具深受广大猿类喜爱。本篇文章旨在记录笔者日常开发工作中一些常用的 Git 应用实践。

常用命令

下面是笔者常用的一些 Git 命令:

命令 说明
git add --all 将当前工作区(working directory)修改添加到暂存区(stage),只有添加到暂存区的修改才能被提交(commit)
git checkout branch_name 切换到名为 branch_name 分支
git checkout -b branch_name 创建名为 branch_name 的新分支
git checkout commit_id 切换到 id 为 commit_id 对应的提交
git checkout tag_number 切换到 tag 号 为 tag_number 对应的提交
git commit -m "comment" 向本地仓库提交修改,comment 代表本次提交的注释内容
git push 向远程仓库推送更新本地提交
git push --tags 向远程仓库推送本地仓库的所有 tag 信息
git stash 将工作区与暂存区中的修改临时保存到 git 栈(需要时可以恢复),并将工作区与暂存区恢复至上一次提交的状态
git stash save -u "message" 将工作区与暂存区中的修改以及未被追踪的修改(-u)临时保存到 git 栈(需要时可以恢复),并将工作区与暂存区恢复至上一次提交的状态,message 表示此次操作的备注信息
git stash list 列举当前 git 栈中所有被临时保存的修改,每一次临时修改都对应唯一的 stash_id,从 0 开始,依次往后追加
git stash pop 将 git 栈栈顶(即最新的)的临时修改弹出并恢复至当前分支
git stash apply stash@{stash_id} 将 git 栈中 stash_id 对应的临时修改恢复至当前分支,但不会删除 git 栈中的对应内容
git stash drop stash@{stash_id} 将 git 栈中 stash_id 对应的临时修改删除
git stash clear 删除 git 栈中所有的临时修改
git tag tag_number 为最新提交打上名为 tag_number 的 tag 号
git tag tag_number commit_id 为 id 为 commit_id 对应的提交打上名为 tag_number 的 tag 号
git tag -d tag_number 删除本地仓库名为 tag_number 的 tag 号
git push origin :refs/tags/tag_number 删除远程仓库名为 tag_number 的 tag 号
git reset --hard HEAD 丢弃工作区与暂存区中的修改(未被跟踪的修改需要先添加至暂存区),并恢复至最新提交的状态
git reset --hard commit_id 丢弃工作区与暂存区中的修改(未被跟踪的修改需要先添加至暂存区),并恢复至 id 为 commit_id 对应的提交的状态
git branch -a 查看本地及远程的所有分支
git branch -D branch_name 删除本地仓库名为 branch_name 的分支
git push origin --delete branch_name 删除远程仓库仓库名为 branch_name 的分支
git log 查看提交日志
git status 查看工作树状态,分别列举工作区和暂存区中的修改
git diff 详细展现工作树与上次提交间的变更
git diff branch1 branch2 详细展现 branch2 分支相比 branch1 分支的修改
git config --list 查看本地仓库的 git 配置

善用每一个命令的 --help 选项可以帮助你快速地了解该命令。

alias 别名

为常用命令设置 alias 别名可提升工作效率,具体设置在 ~/.gitconfig 文件中,下面是笔者常用的一些 git alias 别名:

1
2
3
4
5
6
7
[alias]
co = checkout
st = status
br = branch
ci = commit
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
go = reset --hard

其中,lg 别名可以很好地美化提交历史显示,例如下图清晰地展示了 Apollo 本地仓库 master 分支上两周内的提交历史:

美化过的提交历史

配置 Ubuntu 终端默认显示所在 Git 仓库的当前分支

Ubuntu 环境中,在一个 Git 仓库下打开终端无法显示当前所处分支,很不方便,可以按照如下步骤进行配置解决该问题:

(1)在终端中打开 bash shell 的配置文件 .bashrc

1
sudo gedit ~/.bashrc

(2)在文件末尾添加如下 shell 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# These shell commands block are for the purpose of displaying the
# current branch name of the current repository.
find_git_branch ()
{
local dir=. head
until [ "$dir" -ef / ]; do
if [ -f "$dir/.git/HEAD" ]; then
head=$(< "$dir/.git/HEAD")
if [[ $head = ref:\ refs/heads/* ]]; then
git_branch="(*${head#*/*/})"
elif [[ $head != '' ]]; then
git_branch="(*(detached))"
else
git_branch="(*(unknow))"
fi
return
fi
dir="../$dir"
done
git_branch=''
}
PROMPT_COMMAND="find_git_branch; $PROMPT_COMMAND"
export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[0;32m\]\$git_branch\[\033[0m\] \$ "

(3)使更改立即生效:

1
source ~/.bashrc

作者发表在独立博客的几篇 Git 系列小文章 可提供一些其它有益参考,此外,廖雪峰的 Git 系列教程 是不错的 Git 学习资料。如果读者朋友有哪些其它的可提升工作效率的 Git 命令或应用技巧也请不吝赐教。

Thank you for your donate!