Skip to content

命令

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

  1. /etc/gitconfig (操作系统,几乎不会用), git config --system
  2. ~/.gitconfig(很常用)git config --global
  3. .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

查看状态,查看是否还有文件未提交,暂存区

image-20240705234251164

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

image-20240705234542031

git log

查看提交日志

image-20240705235201290

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

image-20240706000916721

查看项目config配置

cat .git/config

设置用户名和邮箱

  1. /etc/gitconfig (操作系统,几乎不会用), git config --system
  2. ~/.gitconfig(很常用)git config --global
  3. .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

image-20240707222343542

情景二:

分支有新提交,master也有新提交

image-20240715220646728

分支冲突

在情景二中,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 master

git pull

git pull // 拉取,同时会执行合并merge  == fetch + merge
git

git remote

git remote show // 查看远程仓库
git remote show orgin // 查看远程仓库orgin

.gitignore

忽略文件,不被git识别

三大撤销

git commit   --amend        撤销上一次提交  并将暂存区文件重新提交,上一次提交和本次合成一次提交
git checkout -- <file>     拉取暂存区文件 并将其替换成工作区文件
git reset HEAD  -- <file>  拉取最近一次提交到版本库的文件到暂存区  改操作不影响工作区