Git是一个分布式的版本管理工具,在Git出现之前比较流行的版本管理工具是SVN和CVS,但这两个版本管理工具都是中心式的,即所有的版本管理功能都是由服务器来完成的,如果服务器崩溃了,所有的版本信息就都没了。
但Git却不同,Git是有大神Linus开发的一个分布式的版本管理工具,每个Git客户端就可以在本地管理一个或多个版本库,这个过程并不依赖于中央仓库,而像GitHub、Gitee这种网站也并不是版本管理中心,而是代码托管中心。
## 命令大全
```
#用户全局设置
git config --global user.name "echo"
git config --global user.email "13113960962@163.com"
#针对当前项目的用户设置(在项目目录下执行)
git config --local user.name "echo"
git config --local user.email "13113960962@163.com"
#查看配置列表
git config --list
cd ~
cat .gitconfig
#初始化某个目录为git仓库
git init
#查看git管理下的文件状态
git status
#将文件纳入到git管理(添加到暂存区)
git add filename
git add *.suffix
git add --all
#提交文件到归档区
git commit -m "注释说明"
#提交一个空,没什么意义
git commit --allow-empty -m "注释说明"
#查看记录
git log
git log --oneline
git log --oneline --graph
#找到某个人提交的记录
git log --oneline --author="echo"
#找到多个人的提交记录
git log --oneline --author="echo\|zhangsan"
#过滤指定的提交注释
git log --oneline --grep="key word"
#找到某个时间段内的提交记录-早九点到早12点
git log --oneline --since="9am" --untile="12am"
#找到某个时间点之后的提交记录
git log --oneline --after="2022-08-09"
#查看特定文件的提交记录
git log -p filename
#通过git来删除文件,可以减少执行add操作,即直接删除文件和暂存区的内容
git rm filename
#将某个文件从git版本管理中移除,但不删除文件本身
git rm filename --cached
#直接通过git修改文件名称,可以减少执行add
git mv oldname newname
#修改最后一次提交记录的注释信息
git commit --amend -m "Welcome to China"
#把某个遗漏的文件追加到最近的一次commit上
git add newfile
git commit --amend --no-endit
#清除那些在引入.gitignore之前加入到git管理的文件夹
git clean -fX
#查看某个文件的某行代码是谁写的
git blame filename
git blame -L 5,10 filename #只查看5-10行的内存
#挽救被rm但还没有提交到git中的文件
git checkout file
git checkout .
#拆掉最新一次提交
git reset master^
#回退到指定的末次提交
git log --oneline
git reset commitId
#查看操作记录
git reflog
#创建分支
git branch newBranch
git checkout -b newBranch
#创建一个指向某次提交的分支,通常用于恢复某个被误删的分支(配合git reflog)
git branch newBranch commitId
#查看分支
git branch
#切换分支
git checkout branchName
#修改分支名称
git branch -m cat tiger
#删除分支
git branch -d/-D branchName
#合并分支
git merge otherBranch
#创建标签
git tag tagName commitId //轻量级标签
git tag tagName commitId -a -m "注释说明" //有附注的标签
#删除标签
git tag -d tagName
#为本地项目添加远端仓库
git remote add origin sshUrl/HttpUrl
#将本地分支推送到远端仓库
git push origin master
#将本地分支推送到远端仓库的cat分支
git push origin master:cat
#从远端仓库拉取文件
git fetch //fetch下来的内容再origin/master上,需要手动合并
#将origin/master合并到本地master
git merge origin/master
#从远端仓库拉取文件并自动合并 pull = fetch + merge
git pull
git pull -rebase //以rebase的方式进行合并,即不产生merge commit节点
git pull origin master
#从远端克隆项目, clone用来首次下周向,会复制包括分支在内的所有内容
git clone sshUrl
```