命令
git init // 初始化本地仓库,生成.git目录
git add 文件 // 工作区工作区添加,修改,删除的变化更新到暂存区
git rm 文件 // 删除工作区和暂存区
git mv 文件 新文件 // 移动或重命名一个文件、目录或软连接的工作区和暂存区
git commit // 提交本地仓库 暂存区到版本库
git status // 查看状态,暂存区
git log // 查看提交日志,版本库
git checkout -- 文件 // 拉取暂存区文件 并将其替换成工作区文件
git reset HEAD 文件 // 拉取最近一次提交到版本库的文件到暂存区 改操作不影响工作区
git config --global user.name "liuchenyun" // 设置全局用户名
git config --global user.email 1210737588@qq.com // 设置全局邮箱
git branch // 分支
git merge // 合并
git stash // 保存
git tag // 标签
git blame // 查看记录git config
- /etc/gitconfig (操作系统,几乎不会用), git config --system
- ~/.gitconfig(很常用)git config --global
- .git/config (项目中) git config --local
git init
初始化本地仓库,生成.git目录,.git是隐藏文件
git add
工作区的文件添加到暂存区
git add/git add -A/-all 工作区的所有变化提交到暂存区,包括修改(modified)、新文件(Untracked files)、删除的文件(deleted)
git add file 添加一个文件
git add dir 添加一个目录,包括已经删除的文件
git *.c 添加以 .c 结尾的文件
git add . 添加当前目录所有文件,.gitignore 指定的文件除外
git add -u 添加暂存区已有的文件(包括删除操作),但不添加新增的文件git add 会在 .git/objects 目录下面创建一个目录和文件,并且在 .git/index 文件中添加一行内容(使用 hash sha-1 算法得到 40 位的 blob 对象 hash 字符串文件)
git commit
暂存区提交本地仓库
git commit -m "提交的注释",提交命令必须写入注释
git status
查看状态,查看是否还有文件未提交,暂存区

当修改文件后,再查看,提示“已被修改,但是未被提交的修改”。

git log
查看提交日志

commit id是唯一字符串(sha1加密),分布式id
按q退出
git log:默认的查看log信息
git log -p:显示每次Commit时,文件的改动信息。
git log --graph:以图表形式查看分支合并的情况,其显示的结果中包含每个状态点的哈希值,将会在下面的回溯中使用。
git reflog
git log --pretty=short: 简约的形式显示提交信息。
git log --pretty=oneline:将每次的Commit以一行来进行显示。
git log --pretty=<format-string>
%n:换行
%H:Commit Hash值
%h:Commit Hash值的缩写
%s:提交的信息:commit information
%ar:作者日期(相对日期)
%an:作者名字
%Cred:控制其后面的字符颜色为红色
%Cgreen:控制其后面字符颜色为绿色
%Cblue:控制其后面字符的颜色为蓝色
git log --oneline --graph --decorate --all 查看仓库中所有分支关系图git checkout
git checkout -- 文件,拉取暂存区文件 并将其替换成工作区文件
git reset HEAD
git reset HEAD 文件 , 拉取最近一次提交到版本库的文件到暂存区 改操作不影响工作区
git reset HEAD ~,退回上一次commit之前所有的add添加,
git reset --hard HEAD^ //回退到上一个提交
git reset --hard HEAD~1 //回退到上一个提交
git reset --hard commit_id //回退到某一个提交
// 上面还原
查看操作日志 git relog,再配合 git reset --hard commit_id 回到某个提交git rm
git rm a.txt 如果工作区没有修改, 删除工作区和暂存区文件
git rm --cached a.txt 如果工作区没有修改, 只删除暂存区文件。
git rm -f a.txt 强制删除工作区和暂存区,不管工作区有没有修改
git rm -f --cached a.txt 强制删除暂存区,不管工作区有没有修改执行了2步
1.删除工作区中的文件
2.“删除”暂存区:实际执行是git add
误删除还原也要2步:
git reset HEAD 文件 撤销了第二步
git checkout -- 文件 还原文件,第一步
如果是直接操作系统rm或手动误删除,执行了1步
1.删除了文件
还原也是1步:
git checkout -- 1.txt 直接还原文件
git mv
移动或重命名一个文件、目录或软连接
git mv [file] [newfile]同git rm 一样,git的操作比直接操作mv移动多了操作git的暂存区
git config

查看项目config配置
cat .git/config
设置用户名和邮箱
- /etc/gitconfig (操作系统,几乎不会用), git config --system
- ~/.gitconfig(很常用)git config --global
- .git/config (项目中) git config --local
git branch
git branch // 查看所有分支
git branch new_branch // 创建新分支
git branch new_branch commit_id // 创建新分支以某次提交id
git checkout new_branch // 切换分支
git checkout -b new_branch //创建新分支并切换
git branch -d new_branch // 删除分支,不能处于删除的分支(不能删除新增内容并且没有合并的分支)
git branch -d new_branch // 删除分支,不能处于删除的分支
git branch -m master master2 // 修改分支名字,master改为master2分支:一条工作时间线,创建的分支不会像svn完全copy一份,只创建一个新的指针
HEAD:指向当前分支
master:指针指向分支线的最后一次提交
git merge
git merge new_branch // 在master主分支执行,合并new_branch分支内容
git merge --no-ff new_branch // 会多出这次合并的提交信息,线上门禁分支就有git merge 快进,mater的指针直接指向分支的最新提交处
情景一:
在分支上有新提交时,把分支的提交merge到master

情景二:
分支有新提交,master也有新提交

分支冲突
在情景二中,master主分支和分支对同一处代码提交,merge时出现冲突,
1.自行解决在工作区的处理冲突,
2.解决后是用git add,修改暂存区的冲突状态
3.git commint 合并记录从暂存区修改到版本库分支中
4.还可以在分支中,git merge master,把master合并到分支上(不会出现冲突,master指针最新处。所以分支直接fast forwad快进到master的指针)
git stash
当我们在单独拉取的功能分支中进行开发时,遇到线上出现bug需要进行紧急修复,我们需要切换到主分支,进行代码的修复。但是我们直接在本地切换到主分支,则会提示当前文件的改动会丢失。
将当前未提交的修改(即工作区和暂存区的修改)先暂时储藏起来
git stash // 保存到临时
git stash save ‘说明’// 保存到临时
got stash list // 查看储藏记录
git stash pop // 取出最近一次的修改,再删除
git stash apply // 取出最近一次的修改,不删除
git stash apply stash!{0}// 取出某次一次的修改,不删除
git stash drop // 删除临时储藏
git stash clear // 删除所有储藏git tag
git tag // 查看标签列表
git tag -l 'v1.0' // 查找
git tag v1.0 // 创建标签
git tag -a v1.0 -m '1版本标签' // 创建标签带注释的
git tag -d v1.0 // 删除标签git blame
查看文件每次每行修改的记录
git blame 文件git diff
diff --git a/aa b/aa
git diff // 比较a/aa(暂存区)与b/aa(工作区)的不同
git diff HEAD // 比较工作区与最新一次提交的不同
git diff --cached commit_id //比较暂存区与版本库的不同git push
git push // 推送
第一次推送
git remote add origin 地址 // 第一次推送到远程仓库 ,origin是约定俗成的仓库名
git push -u origin master // 第一次关联远程的origin mastergit pull
git pull // 拉取,同时会执行合并merge == fetch + merge
gitgit remote
git remote show // 查看远程仓库
git remote show orgin // 查看远程仓库orgin.gitignore
忽略文件,不被git识别
三大撤销
git commit --amend 撤销上一次提交 并将暂存区文件重新提交,上一次提交和本次合成一次提交
git checkout -- <file> 拉取暂存区文件 并将其替换成工作区文件
git reset HEAD -- <file> 拉取最近一次提交到版本库的文件到暂存区 改操作不影响工作区