git -> 分布式版本管理系统
git 是一个分布式版本控制软件,最初由 Linus Torvalds (林纳斯·托瓦兹) 创作,于 2005 年以 GPL 许可协议发布。最初目的是为了更好地管理 Linux 内核开发而设计
git 是用于 Linux 内核开发的版本控制工具。与 CVS、Subversion(svn)一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git 的速度很快,这对于诸如 Linux 内核这样的大项目来说自然很重要。git 最为出色的是它的合并追踪(merge tracing)能力
git 是用 C 语言开发的,以追求最高的性能
# git 的安装
yum -y install git(CentOS)
apt -y install git(Debian)
brew install git(macOS)
https://git-scm.com/download/win(win 下载 Git Bash 的链接)
# git 配置用户名和邮箱,git config --global --unset user.name 可取消全局用户名配置
# 设置 git 的 PS1 环境变量
Bash
在 ~/.bash_profile 文件中添加如下内容并执行 source ~/.bash_profile ,其中 /usr/local/etc/bash_completion.d/git-prompt.sh 文件定义了 __git_ps1 等相关函数,并且不同操作系统安装的文件路径和文件名可能不一样,因此要改为对应的文件路径和文件名
source /usr/local/etc/bash_completion.d/git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true
export PS1='\[\033[01;31m\][\[\033[01;32m\]\u\[\033[01;35m\]@\[\033[01;33m\]\h \[\033[01;34m\]\W$(__git_ps1 "(%s)")\[\033[31m\]\[\033[01;31m\]]\[\033[01;36m\]\$\[\033[00m\] '
ZSH
# 安装 ZSH 和插件
brew install zsh zsh-autosuggestions zsh-syntax-highlighting
在 ~/.zshrc 文件中添加如下内容并执行 source ~/.zshrc
setopt PROMPT_SUBST
__git_ps1() {
local branch_name
if branch_name=$(git symbolic-ref --short HEAD 2>/dev/null); then
printf "$1$branch_name$2"
fi
}
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
)
autoload -Uz compinit
compinit
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/local/etc/bash_completion.d/git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true
export PS1='%F{green}%n%f@%F{magenta}%m%F{blue} %~%F{red}$(__git_ps1 " (%s)") %F{cyan}$%f '
效果图如下:
# git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull
- workspace:工作区
- staging area:暂存区/缓存区
- local repository:版本库或本地仓库
- remote repository:远程仓库
# 初始化 git 版本库(设置 git 的 PS1 环境变量后终端就会显示代码分支和 git 仓库的状态信息),git 仓库的状态信息记熟后可避免频繁敲 git status 命令,常见的 git 仓库的状态信息如下:
`#` 表示当前分支是干净的(clean),这意味着当前工作目录中的所有更改都已经提交或暂存,没有未跟踪的文件
`%` 表示当前分支存在未跟踪的文件(untracked files),这意味着在当前工作目录中有一些文件没有添加到 git 仓库中
`*` 表示当前分支存在未提交的更改(changes to be committed),这意味着在当前工作目录中有一些已经暂存但尚未提交的更改
`+` 表示当前分支存在未暂存的更改(changes not staged for commit),这意味着在当前工作目录中有一些已经修改但尚未暂存的更改
`$` 表示当前分支与上游分支存在差异(diverged),这意味着当前分支的提交历史与上游分支的提交历史有所不同
`=` 表示当前分支与上游分支是完全一致的(up to date),这意味着当前分支的提交历史与上游分支的提交历史完全相同
# 工作区 git add -> 暂存区 git commit -> 本地仓库
git log 命令的 --pretty 参数支持多种参数,分支的 commit 较多时可选择对应的参数来查看
# git restore file 表示从工作区撤销文件的改动,恢复文件至改动前的状态
# git restore --staged file 表示从暂存区撤销添加的代码,即撤销 git add 操作
# git commit -a file == git add file + git commit
# git reset --hard HEAD^ 表示代码回滚到上个版本,回滚到上两个版本使用 git reset --hard HEAD^^
git reflog 表示查看回滚日志
下图中也可使用 git reset --hard HEAD@{1} 或 git reset 3ce7492 回到 “my first modification”
# git 标签管理(commit 在添加 tag 后可通过 tag 进行回滚)
# git 分支管理(git checkout -b devan-devops == git switch -c devan-devops == git branch devan-devops + git switch devan-devops)