git -> 分布式版本管理系统

发布时间 2023-08-02 15:59:15作者: demoduan

git 是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于 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(Mac OS)

https://git-scm.com/download/win(win 下载 Git Bash 的链接)

# git 配置用户名和邮箱

# 设置 git 的 PS1 环境变量

 ZSH 设置 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\] '

# git 常用的是以下 6 个命令:git clonegit pushgit add 、git commitgit checkoutgit 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 -> 本地仓库

分支的 commit 比较多时可使用 git log --pretty=oneline 或 --pretty=reference 查看

# git restore file 表示从工作区撤销文件的改动,恢复文件至改动前的状态

 # git restore --staged file 表示从暂存区撤销添加的代码,即撤销 git add 操作

 # git commit -a file == git add file + git commit file

 # git reset --hard HEAD^ 表示代码回滚到上个版本(上次 commit 前),回滚到上两个版本使用 git reset --hard HEAD^^

 git reflog 表示查看回滚日志

 下图中也可使用 git reset --hard HEAD@{1} 回到 “my first modification”