git思维导图
2022-05-31 20:56:37 46 举报
AI智能生成
git思维导图
作者其他创作
大纲/内容
代码仓库
创建仓库
初始化本地仓库
cd 文件夹路径 & git init
说明:进入需要创建代码仓库的文件夹,然后执行初始化操作
说明:进入需要创建代码仓库的文件夹,然后执行初始化操作
克隆远程仓库至本地
git clone 远程仓库地址
默认克隆远程仓库的master(主)分支(可以通过-b参数指定),但除了得到一个本地master分支外,还有一个远程master分支的
镜像分支origin/master(用于标识本地与远程仓库的同步状态,另外分支就是一个引用而已,其指向某个具体的提交,并不占用空间)
以及其他可能存在的远程镜像分支,可以通过git branch -r查看,假设有一个origin/dev,现要在本地创建dev分支并进行开发,则可
执行:git checkout -b dev origin/dev,注意检出到远程镜像分支上会自动分离HEAD,即你无法在本地直接修改这些分支(的指向)
镜像分支origin/master(用于标识本地与远程仓库的同步状态,另外分支就是一个引用而已,其指向某个具体的提交,并不占用空间)
以及其他可能存在的远程镜像分支,可以通过git branch -r查看,假设有一个origin/dev,现要在本地创建dev分支并进行开发,则可
执行:git checkout -b dev origin/dev,注意检出到远程镜像分支上会自动分离HEAD,即你无法在本地直接修改这些分支(的指向)
git clone --depth 1 远程仓库地址
仅下载master(主)分支的最新一次的提交数据到本地,git branch -a查看将只有本地master和origin/master两个分支
添加文件到仓库
添加文件到暂存区
添加单个文件
git add 指定的文件
说明:如果是新增文件(未跟踪状态),提交到暂存区后将被git持续跟踪,如果
是已经添加到暂存区的文件,重新add将覆盖暂存区的相关数据
说明:如果是新增文件(未跟踪状态),提交到暂存区后将被git持续跟踪,如果
是已经添加到暂存区的文件,重新add将覆盖暂存区的相关数据
如果某文件不该被添加到暂存区,则:git rm --cached 指定的文件,这并不
影响工作区的文件内容,若要连工作区一起删除,则:git rm -f 指定的文件
影响工作区的文件内容,若要连工作区一起删除,则:git rm -f 指定的文件
添加所有文件
git add .
说明:将工作区所有变化提交到暂存区,包括文件内容修改(Modify)以及新增文件(New),但不包括被删除的文件
说明:将工作区所有变化提交到暂存区,包括文件内容修改(Modify)以及新增文件(New),但不包括被删除的文件
git add -u
说明:将所有已跟踪文件的修改添加到暂存区,该操作不会提交新增文件(到暂存区)
说明:将所有已跟踪文件的修改添加到暂存区,该操作不会提交新增文件(到暂存区)
git add -A
说明:git add .和git add -u两个功能的合集,一次性提交所有被删除、被替换、被修改和新增的文件到暂存区
说明:git add .和git add -u两个功能的合集,一次性提交所有被删除、被替换、被修改和新增的文件到暂存区
注:.gitignore中指定的文件或其他符合过滤规则的文件会被忽略
提交到本地仓库
git commit
填写commit message
保存
git commit --amend
说明:修改最近一次提交的内容以及commit message
说明:修改最近一次提交的内容以及commit message
注:不建议使用git commit -m "commit message",建议提交遵循commit message规范
查看工作区和暂存区状态
git status
说明:加一个-s参数查看简略信息
说明:加一个-s参数查看简略信息
查看文件变化
git diff
说明:当工作区改变但尚未添加到暂存区时,比较的是工作区与最近一次提交的区别,若已有部分文件被添加到暂存区,比较的则是工作区与暂存区的区别
说明:当工作区改变但尚未添加到暂存区时,比较的是工作区与最近一次提交的区别,若已有部分文件被添加到暂存区,比较的则是工作区与暂存区的区别
git diff --cached
说明:比较暂存区与最近一次提交的区别,包括增删改
说明:比较暂存区与最近一次提交的区别,包括增删改
git diff HEAD
说明:比较工作区与HEAD所指向的提交之间的区别,可以加上“-- 路径”参数查看指定目录下的区别
说明:比较工作区与HEAD所指向的提交之间的区别,可以加上“-- 路径”参数查看指定目录下的区别
git diff 提交/分支1 提交/分支2
说明:比较两次提交/分支之间的区别,可以加上--stat参数显示简略的信息
说明:比较两次提交/分支之间的区别,可以加上--stat参数显示简略的信息
注:建议将beyond compare配置为diff工具,用于diff以及merge冲突
仓库配置
配置全局用户名和邮箱
git config --global user.name "用户名"
git config --global user.email "邮箱"
注:若是个人开发机可以这样配置,若是公共编译机则不能这样配置
配置当前仓库用户名和邮箱
git config user.name "用户名"
git config user.email "邮箱"
代码版本/提交切换
查看过去版本/提交
提交详情
git log
提交简介
git log --pretty=oneline或git log --oneline
注:可以加一个--graph参数,图形化查看历史提交
回退版本/提交
git reset 提交哈希
说明:强制将当前分支回退到某历史版本,注意HEAD不能处于游离
状态,否则分支的指向不会改变。可通过git reflog找回丢弃的版本,
这种方式适用于丢弃的提交尚未推送到远程仓库的情况
说明:强制将当前分支回退到某历史版本,注意HEAD不能处于游离
状态,否则分支的指向不会改变。可通过git reflog找回丢弃的版本,
这种方式适用于丢弃的提交尚未推送到远程仓库的情况
譬如:git reset --hard HEAD^(用HEAD^指向的提交刷新暂存区和
工作区,同时修改HEAD和分支的指向),表示回退到上次(父)提交
工作区,同时修改HEAD和分支的指向),表示回退到上次(父)提交
git revert 提交哈希
说明:提交一个新的版本,将需要回滚的版本内容再反向修改
回去,这种方式便于推送到远程仓库并分享给他人
说明:提交一个新的版本,将需要回滚的版本内容再反向修改
回去,这种方式便于推送到远程仓库并分享给他人
譬如:git revert HEAD,回滚到上一次提交
再譬如:git revert HEAD^,回滚到上上一次提交
再譬如:git revert HEAD^,回滚到上上一次提交
重返未来版本
查看操作提交以及被回退的提交
git reflog
注:该记录有时限,且只在本地
回到未来版本(或者说被丢弃的版本)
git reset --hard 提交哈希
撤销修改
工作区文件修改撤销
git checkout -- 指定的文件
说明:实际是用暂存区刷新工作区,如果暂存区不存在,才会使用版本库中对应文件内容进行刷新,总而言之,就是使工作区恢复到最近一次git add或git commit时的状态。若执行“git checkout .”则表示全部刷新
说明:实际是用暂存区刷新工作区,如果暂存区不存在,才会使用版本库中对应文件内容进行刷新,总而言之,就是使工作区恢复到最近一次git add或git commit时的状态。若执行“git checkout .”则表示全部刷新
暂存区文件修改撤销
git reset HEAD 指定的文件
说明:实际是用HEAD所指版本库(提交)刷新暂存区,若执行“git reset HEAD”则表示全部
刷新,注意这里是不带--hard参数的,带--hard参数将会进一步用暂存区刷新工作区
说明:实际是用HEAD所指版本库(提交)刷新暂存区,若执行“git reset HEAD”则表示全部
刷新,注意这里是不带--hard参数的,带--hard参数将会进一步用暂存区刷新工作区
如果已经提交到了版本库,则参见“回退版本/提交”
删除文件
从暂存区中删除文件(取消跟踪),但是本地文件不会被删除
git rm --cached 文件名
从版本库中删除文件
1、git rm 指定的文件
2、git commit --amend
工作区误删恢复
参见“撤销修改”,祈祷其已经被添加在暂存区吧(温馨提示:新增文件要即时添加到暂存区)
移动或重命名文件/夹
git mv 旧文件名 新文件名
忽略文件
通过git仓库下的.gitignore文件设置具体的过滤规则
分支
分支的增删查改
创建分支
仅创建
git branch 分支名
说明:新创建的分支将指向当前所处位置(即HEAD指针所指,且HEAD允许处于游离状态)的提交
说明:新创建的分支将指向当前所处位置(即HEAD指针所指,且HEAD允许处于游离状态)的提交
git branch 分支名 提交哈希
说明:新创建的分支将指向命令中第二个参数所指定的提交(也可以使用相对引用)
说明:新创建的分支将指向命令中第二个参数所指定的提交(也可以使用相对引用)
创建并切换到该分支
git checkout -b 分支名
切换分支
git checkout 分支名
git checkout命令用于将HEAD头指针检出到指定位置,这个“位置”既可以
由分支名也可以由具体的提交哈希来指明,后者将导致HEAD指针处于“分离
状态”,即当前不处于任何分支上,反之,HEAD则是和当前分支绑定在一起
,随着新的提交被创建,HEAD前进,与之绑定的分支也会前进并指向新提交
由分支名也可以由具体的提交哈希来指明,后者将导致HEAD指针处于“分离
状态”,即当前不处于任何分支上,反之,HEAD则是和当前分支绑定在一起
,随着新的提交被创建,HEAD前进,与之绑定的分支也会前进并指向新提交
查看HEAD指向:cat ./.git/HEAD
或者:git symbolic-ref HEAD(但当分离HEAD时会提示错误,只有在HEAD指向一个引用如分支时才可以)
或者:git symbolic-ref HEAD(但当分离HEAD时会提示错误,只有在HEAD指向一个引用如分支时才可以)
查看分支指向的提交哈希:git rev-parse 分支名
使用相对引用代替具体的提交哈希值,
注意这并不仅限于checkout命令,如
果使用哈希,需借助git log指令查看
注意这并不仅限于checkout命令,如
果使用哈希,需借助git log指令查看
使用^向上(相对引用的参考可以是分支名也可以是HEAD指针)移动一个提交记录,
可连用,譬如git checkout master^或git checkout HEAD^或git checkout HEAD^^
可连用,譬如git checkout master^或git checkout HEAD^或git checkout HEAD^^
使用~n向上移动n个提交记录,n省略时,同^
实际上^后面也可以跟数字,但是是用于指定参考的哪个父提交(默认不写数字时表示选择
第一个父提交)。另外^和~还可以混用
第一个父提交)。另外^和~还可以混用
合并分支
git merge 分支名
说明:合并指定分支(命令参数)到当前分支,准确说应该是合并指定分支到当前检出位置(即HEAD所指),因为HEAD有可能处于游离状态
说明:合并指定分支(命令参数)到当前分支,准确说应该是合并指定分支到当前检出位置(即HEAD所指),因为HEAD有可能处于游离状态
git merge 分支名 --squash
说明:将分支上的历史提交整合为单个提交合并到当前分支上来
说明:将分支上的历史提交整合为单个提交合并到当前分支上来
注意在合并分支时可禁用fast forward模式:git merge --no-ff 分支名
git rebase 分支名
说明:该(变基)指令用于将指定分支(命令参数)作为当前分支
(准确说是当前检出位置)的base,两个分支线性合并
说明:该(变基)指令用于将指定分支(命令参数)作为当前分支
(准确说是当前检出位置)的base,两个分支线性合并
git rebase 分支名1 分支名2
使分支1成为分支2的base
使分支1成为分支2的base
还有一种交互式的git rebase指令可以修改当前分支提交历史的顺序或者删除某些提交历史:git rebase --interactive或git rebase -i,该
操作完全可以通过git cherry-pick指令替代完成
操作完全可以通过git cherry-pick指令替代完成
git cherry-pick 提交哈希1 提交哈希2 提交哈希3 ...
说明:抓取指定的(一些)提交(注意不能是HEAD上游的提交,这些提交当然也可以由其他分支名来指明)
依序(按参数列表顺序)复制到当前所在位置(即HEAD所指)下面,算是比较另类的合并操作
说明:抓取指定的(一些)提交(注意不能是HEAD上游的提交,这些提交当然也可以由其他分支名来指明)
依序(按参数列表顺序)复制到当前所在位置(即HEAD所指)下面,算是比较另类的合并操作
修改分支
修改分支名
git branch -m 旧分支名 新分支名
说明:本地分支重命名
说明:本地分支重命名
进一步修改远程仓库对应分支名
1、删除远程分支:git push --delete origin 旧分支名
2、推送新命名的本地分支:git push origin 新分支名
3、关联重命名后的本地和远程分支:git branch --set-upstream-to origin/新分支名
修改分支指向
git branch -f 分支名 提交哈希
说明:将分支(引用)强制指向参数所指定的提交,可以使用相对引用代替具体的哈希值
说明:将分支(引用)强制指向参数所指定的提交,可以使用相对引用代替具体的哈希值
删除分支
删除本地分支
删除未合并分支
git branch -D 分支名
说明:强制删除,git branch --delete --force的简写,即使该分支有提交且未合并,也是直接删除
说明:强制删除,git branch --delete --force的简写,即使该分支有提交且未合并,也是直接删除
删除已合并分支
git branch -d 分支名
说明:如果该分支有提交未进行合并,则会删除失败,即该命令会进行合并检查,以防止误删
说明:如果该分支有提交未进行合并,则会删除失败,即该命令会进行合并检查,以防止误删
删除远程分支
删除远程分支
git push origin -d 分支名
建议界面操作(如GitHub)
查看分支
查看当前分支
git branch
查看所有分支(包括远程镜像分支)
git branch -a
说明:其中本地分支就是单纯的本地分支名,而远程分支则命名为“远程仓库名/分支名”
(远程仓库名默认为origin),若要单独查看远程分支,则:git branch -r
说明:其中本地分支就是单纯的本地分支名,而远程分支则命名为“远程仓库名/分支名”
(远程仓库名默认为origin),若要单独查看远程分支,则:git branch -r
暂存修改
暂存工作现场
git stash
恢复工作现场
恢复
git stash apply
说明:你可以将暂存的内容恢复到任何分支上去,相当于执行一次merge操作
说明:你可以将暂存的内容恢复到任何分支上去,相当于执行一次merge操作
删除
git stash drop
恢复+删除
git stash pop
查看暂存栈
git stash list
多人协作
查看远程库信息
git remote
说明:可以加上-v参数以查看详细信息:git remote -v
说明:可以加上-v参数以查看详细信息:git remote -v
添加远程仓库
git remote add origin 远程仓库地址
说明:将远程仓库与本地仓库关联
说明:将远程仓库与本地仓库关联
更新/推送远程库
更新本地的远程库数据
git fetch 远程仓库 分支名
git fetch origin 分支名
说明:从远程库origin(远程仓库默认名)分支下载最新数据到本地并更新本地的远程库镜像分支(本地的同名分支指向不会变化,其实不是同名,而是关联,主要是也没人会把不同名的本地和远程分支关联起来)
说明:从远程库origin(远程仓库默认名)分支下载最新数据到本地并更新本地的远程库镜像分支(本地的同名分支指向不会变化,其实不是同名,而是关联,主要是也没人会把不同名的本地和远程分支关联起来)
git fetch
说明:若不提供任何参数则会从远程仓库下载全部最新数据并更新本地的所有远程库镜像分支
说明:若不提供任何参数则会从远程仓库下载全部最新数据并更新本地的所有远程库镜像分支
git fetch origin source:destination
说明:从远程库origin的source分支(还可以是一个提交)下载最新数据更新本地的destination分支
,注意如果destination本地分支不存在,则会自动创建
说明:从远程库origin的source分支(还可以是一个提交)下载最新数据更新本地的destination分支
,注意如果destination本地分支不存在,则会自动创建
注意若指令“git fetch origin 分支名:分支名”中的两个分支
同名且已关联,则可简写为:git pull origin 分支名
同名且已关联,则可简写为:git pull origin 分支名
git fetch origin :destination
说明:fetch“空”到本地会在本地产生一个新分支destination(内容同远程主分支)
说明:fetch“空”到本地会在本地产生一个新分支destination(内容同远程主分支)
将远程库最新修改更新到本地
git pull 参数
git pull等同于git fetch+git merge,且git pull所带参数同git fetch,因为pull的参数会全部传递给fetch,而merge带有的唯一参数就是fetch所抓取到的远程镜像分支。如果没有任何参数,则从远程库下载所有分支数据到本地并与对应关联的仓库进行合并
git pull --rebase(推荐)等同于git fetch+git rebase
将本地修改推送到远程库
git push 远程仓库 分支名
git push origin 分支名
说明:将本地分支(参数指定)最新数据推送到origin(远程仓库默认名)的同名(这里说的其实不正确,应该是关联的)分支(进行合并),同时
更新本地的远程库镜像分支指针,且git push也可以不带任何参数,一般情况下只推送当前本地分支而非所有分支到远程关联的仓库
说明:将本地分支(参数指定)最新数据推送到origin(远程仓库默认名)的同名(这里说的其实不正确,应该是关联的)分支(进行合并),同时
更新本地的远程库镜像分支指针,且git push也可以不带任何参数,一般情况下只推送当前本地分支而非所有分支到远程关联的仓库
git push origin source:destination
说明:将本地分支source(也可以是一个提交)推送到origin的目的分支destination,同时更新本地远程镜像分支指针
,注意如果远程目的分支不存在,则会自动创建,同时本地会产生其镜像分支origin/destination
说明:将本地分支source(也可以是一个提交)推送到origin的目的分支destination,同时更新本地远程镜像分支指针
,注意如果远程目的分支不存在,则会自动创建,同时本地会产生其镜像分支origin/destination
注意若指令“git push origin 分支名:分支名”中的两个分支
同名且已关联,则可简写为:git push origin 分支名
同名且已关联,则可简写为:git push origin 分支名
git push origin :destination
说明:push“空”到远程分支会导致远程库的destination分支被删除
说明:push“空”到远程分支会导致远程库的destination分支被删除
本地分支与远程分支关联
使用远程分支A创建(同名的)本地分支
git checkout -b A origin/A
使用git branch -u指令进行关联
git branch -u origin/A A或git branch --set-upstream-to=A origin/A
注:建议开发遵循或者参照git标准工作流,比如git flow、github flow或者gitlab flow
代码版本tag
查看tag
本地tag
git tag
远程tag
git tag -r
操作tag
添加tag
给当前版本(HEAD所指)添加tag
git tag 标签名
给指定的历史版本添加tag
git tag 标签名 提交哈希
删除tag
删除本地标签
git tag -d 标签名
删除远程标签
git push origin -d 标签名
推送到远端仓库
git push origin 标签名
推送所有未提交的tag
git push origin --tags
更新到本地
git pull origin --tags
注:tag与branch的操作基本一致,因为tag就是一个仅可读的branch,用于永远指向某个提交不变,检出到tag上也会自动分离HEAD
其他命令
git describe ref
说明:ref可以是任何能被识别为提交记录的引用,如分支名等,缺失时为HEAD,该指令用于查找离ref最近的标签tag
说明:ref可以是任何能被识别为提交记录的引用,如分支名等,缺失时为HEAD,该指令用于查找离ref最近的标签tag
gitk --all
git blame
git bisect
过二分查找定位引入 bug 的变更
git relog
...
git help
查看git常用命令,或者使用git help -a查看git可用的所有命令,或者在具体的命令后加--help参数查看帮助文档,譬如:git log --help
0 条评论
下一页