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