Git常用命令 个人总结

发布时间:2026/7/31 17:44:03
Git常用命令 个人总结 Git常用命令 个人总结git 介绍一、用户名和邮箱1、查看GIT配置情况2、配置全局用户名和邮箱3、修改默认编辑器二、基础命令1、git 帮助命令2、初始化本地git仓库3、查看git存储状态4、添加文件到暂存区5、将暂存区内容提交为一个版本6、屏蔽文件不参与git管理三、查看命令1、查看历史版本2、查看历史版本记录3、查看某个版本的改动内容4、列表显示某文件修改记录5、查看工作区与版本库的区别四、撤销修改1、取消暂存2、撤销工作区修改3、撤销暂存区修改4、回退版本5、反做版本五、分支1、查看分支2、创建分支3、切换分支4、删除分支5、分支重命名6、当前分支与远程分支的追踪关系六、合并1、将指定分支合并到当前分支2、将与指定分支的差异压缩为一个提交再合并到当前分支3、将指定提交合并到当前分支4、变基5、修改提交(1) 修改add 3提交的注释提交内容不变(2) 完全修改add 3提交(3) 合并提交七、远程1、克隆版本库2、查看所有远程主机3、将远程的更新取回本地4、拉取远程更新并合并5、推送本地更新到远程八、标签1、查看所有标签2、查看标签详情3、创建本地标签4、将标签推送到远程5、删除远程标签(1) 删除本地标签(2) 删除远程标签九、储藏1、临时存储工作区内容2、查看储藏3、提取储藏4、丢弃储藏十、补丁1、生成patch补丁2、应用patch补丁备注本文中的仅作为字段提示并不是命令所需的符号文章内容经过本人整理补充部分内容摘抄自其他文章因时间过长忘记原文网址如有知晓望告知补充git 介绍Git 有四种状态 Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制 通过git add 状态变为Staged状态 Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致 这种类型的文件有两种去处, 如果它被修改, 而变为Modified如果使用git rm --cached移出版本库, 则成为Untracked文件 Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为ModifiedGit 有三种工作区域 工作目录(Working Directory): 对项目的某个版本独立提取出来的内容这些从Git仓库的压缩数据库提取出来的文件放在磁盘上供你使用或修改。 暂存区域(Staging Area): 是一个文件保存了下次将提交的文件列表是待提交文件的暂存区域。一般在Git仓库的目录中有时也被称为索引。 Git仓库: 用来保存项目的元数据和对象数据库的地方。是Git中最重要的部分从其他计算机克隆仓库时拷贝的就是这里的数据简略示例图 push ¯¯¯¯¯¯¯ add ------- commit -------- ----- -------- | 工作区 | ---- | 暂存区 | ------- | 本地仓库 | | 远程仓库 | ¯¯¯¯¯¯¯ ------- -------- ----- -------- pull参考自git知识点整理一、用户名和邮箱1、查看GIT配置情况git config –global -list参数含义–local查看本地仓库的配置–global查看全局的配置git config user.name git config user.email查看用户名和邮箱2、配置全局用户名和邮箱git config --global user.name 你的用户名 git config --global user.email 你的邮箱将保存在C:\Users\windows账户名.gitconfig文件中git config --global --replace-all user.name 新的用户名 git config --global --replace-all user.email 新的邮箱修改全局用户名和邮箱也可以直接在.gitconfig文件中修改参考自git常用命令3、修改默认编辑器git config --global core.editor vimubuntu下默认的编辑器为nano将其修改为vim二、基础命令1、git 帮助命令git help // 常用git命令 git help command // 显示该命令的帮助文档 git help -a // 显示可用命令 git help -g // 帮助向导2、初始化本地git仓库git init3、查看git存储状态git status4、添加文件到暂存区git add 文件路径文件路径使用. 意为当前工作区的全部改动5、将暂存区内容提交为一个版本git commit参数含义-m “本次提交的版本描述”本次提交的注释–amend本次内容合并到最新的版本中不生成新版本6、屏蔽文件不参与git管理touch .gitignore.gitignore只忽略还未纳入版本管理的文件若要忽略已经管理的文件需要先取消其缓存git rm --cached 文件路径 git add 文件路径 git commit -m untracke file被忽略的文件可以使用-f强制纳入管理git add -f 文件路径.gitignore忽略规则如下* 空格不匹配任意文件可作为分隔符可用反斜杠转义 * 开头的文件标识注释可以使用反斜杠进行转义 * ! 开头的模式标识否定该文件将会再次被包含如果排除了该文件的父级目录则使用 ! 也不会再次被包含。可以使用反斜杠进行转义 * / 结束的模式只匹配文件夹以及在该文件夹路径下的内容但是不匹配该文件 * / 开始的模式匹配项目跟目录 * 如果一个模式不包含斜杠则它匹配相对于当前 .gitignore 文件路径的内容如果该模式不在 .gitignore 文件中则相对于项目根目录 * ** 匹配多级目录可在开始中间结束 * ? 通用匹配单个字符 * * 通用匹配零个或多个字符 * [] 通用匹配单个字符列表参考自gitignore的用法常用示例.gitignore: 忽略自身 bin/: 忽略当前路径下的bin文件夹该文件夹下的所有内容都会被忽略不忽略bin文件 /bin: 忽略根目录下的bin文件 /*.c: 忽略 cat.c不忽略 build/cat.c debug/*.obj: 忽略 debug/io.obj不忽略 debug/common/io.obj 和 tools/debug/io.obj **/foo: 忽略/foo, a/foo, a/b/foo等 a/**/b: 忽略a/b, a/x/b, a/x/y/b等 !/bin/run.sh: 不忽略 bin 目录下的run.sh文件 *.log: 忽略所有 .log 文件 test.txt: 忽略当前路径的 test.txt 文件三、查看命令1、查看历史版本git log参数含义-n显示最新的n个版本–oneline单行显示注释 或者–prettyoneline–graph以图表进行显示–name-only仅在提交信息后显示已修改的文件清单–decorate显示分支、Tag等额外信息–all显示所有分支–follow 文件路径显示对文件的所有提交2、查看历史版本记录git reflog多用于回退能够看到git log没有的 amend等内容3、查看某个版本的改动内容git show commitID一般只取前7位即可git能够自动查询4、列表显示某文件修改记录git blame 文件路径参数含义-L n1 n2指定文件的行数范围5、查看工作区与版本库的区别git diff参数含义–cached查看暂存区与版本库的区别–staged同–cached文件路径指定文件查看两个分支之间的差异git diff branch1 branch2参数含义–stat粗略显示没有对比内容文件路径指定文件branch换成commitID比较两个指定commit四、撤销修改1、取消暂存将文件的修改从暂存区回退到工作区git restore --staged 文件路径2、撤销工作区修改git checkout -- 文件路径 git restore 文件路径没add 退到上个版本的状态add过 退到暂存区状态3、撤销暂存区修改将暂存区文件回退到版本库工作区的不影响git reset HEAD -- 文件路径删除暂存区和版本库的文件但保留了工作区的文件git rm --cached 文件路径4、回退版本git reset HEAD参数含义–soft保留暂存区和工作区版本回退–mixed撤销暂存区保留工作区版本回退 等同于无参数的git reset–hard撤销暂存区和工作区版本回退HEAD回退到上一次提交 或者HEAD^上上一次提交 或者HEAD~5 上5个提交HEAD{5}回退到git reflog中amend之类的版本commitID回退到指定版本 不用写太全会自动查询5、反做版本git revert commitID将对应版本的内容反做以生成一个新的版本默认会打开编辑器确认新版本的注释参数含义-n先将改动保留到暂存区不提交–abort合并冲突时取消合并退回到revert前–quit合并后退出但保留变化git revert commitID1..commitIDN //反做commit1到commitN不包括1 (1, N] git revert commitID1^..commitIDN //依次反做commit1到commitN五、分支1、查看分支git branch参数含义-r查看远程分支-a查看所有分支2、创建分支git branch 分支名创建并切换到分支git checkout -b 分支名 git switch -c 分支名 //git 2.23版本后引入3、切换分支git checkout 分支名 git checkout - //切换至前一个分支 git switch 分支名 //git 2.23版本后引入工作区暂存区无改动才能切换4、删除分支git branch -d 分支名 git branch -D 分支名 //强制删除5、分支重命名git branch -m 原分支名 新分支名6、当前分支与远程分支的追踪关系git push -u 远程主机名 远程分支名 //第一次推送时建立联系 git branch --set-upstream-to远程主机名/远程分支名 //修改联系 git branch--unset-upstream //取消联系 git branch -vv //查看联系六、合并备注合并前请确保没有未commit的文件否则即使中止合并也无法恢复1、将指定分支合并到当前分支git merge 分支名默认以fast-forward方式快速合并即直接移动HEAD指针到最新的提交将对应分支与当前分支不同的提交以时间顺序合并过来合并后默认生成一个合并提交作为提示参数含义-m “注释”指定最后创建的合并提交的注释–abort终止合并恢复到合并前–quit退出合并但保留改动–continue继续之前的合并操作–no-commit合并后不自动提交-e合并后打开编辑器自行编辑本次合并提交的注释-v显示详细的合并进度和结果-q不显示合并进度信息–no–ff即使可以快速合并也产生一个合并的提交作提示–stat合并结束处显示文件差异状态-n不显示文件差异状态即–no-stat冲突若合并的二者中修改了同一位置的内容将停止合并工作区输出冲突冲突部分会以, 和 表示在之前的部分是当前分支的情况在之后的部分是对方分支的情况删除不需要的部分git add后git merge --continue即可2、将与指定分支的差异压缩为一个提交再合并到当前分支git merge --squash 分支名将当前分支与目标分支的差异压缩成一个提交不会自动生成版本需要手动提交3、将指定提交合并到当前分支git cherry-pick commitID参数含义分支名分支名则转移该分支的最新提交-m “注释”指定最后创建的合并提交的注释–abort终止合并恢复到合并前–quit退出合并但保留改动–continue继续之前的合并操作git cherry-pick commitID1..commitIDN //合并commit1到commitN的所有提交不包括commit1 //且提交1必须早与提交2 git cherry-pick commitID1^..commitIDN //合并commitID1到commitID2的所有提交4、变基git rebase 分支名参数含义–abort终止合并恢复到合并前–quit退出合并但保留改动–continue继续之前的合并操作从两个分支的共同祖先处提取当前分支上的修改然后将当前分支指向基分支的最新提交最后将刚才提取的修改与基分支的最新提交比较解决冲突后形成新的提交即以指定分支为新基底将当前分支与新基底不同的提交重新提交到新基底上5、修改提交git rebase -i HEAD~3 //修改最近三次的提交执行命令后会打开vi界面最上方显示如下pick 63ce9fb add 3 pick 8b485bb add 4 pick a75ed74 add 5(1) 修改add 3提交的注释提交内容不变– rewordr 63ce9fb add 3 pick 8b485bb add 4 pick a75ed74 add 5(2) 完全修改add 3提交– edite 63ce9fb add 3 pick 8b485bb add 4 pick a75ed74 add 5保存退出后分支名会改变 (master|REBASE-i 1/3)在add 3和add 4之间添加提交git add git commit进行新提交最后git rebase --continue会发现本次提交到了add 3和add 4之间只是想修改add 3不生成新提交git add git commit --amend提交到add 3中最后git rebase --continue结束即可(3) 合并提交– squashpick 63ce9fb add 3 s 8b485bb add 4 s a75ed74 add 5提示编写新提交的注释保存退出后add 3 到 add 5的提交都消失只剩下新提交– fixuppick 63ce9fb add 3 f 8b485bb add 4 f a75ed74 add 5类似squash的合并但不会重新生成提交会将add 4和add 5的提交都合并到add 3中最后三个提交只保留add 3命令含义ppick use commitrreword use commit, but edit the commit messageeedit use commit, but stop for amendingssquash use commit, but meld into previous commitffixup like “squash”, but discard this commit’s log messagexexec run command (the rest of the line) using shellddrop remove commit参考自git rebase -i 命令详解七、远程1、克隆版本库git clone 网址 本地目录名默认在当前路径下拷贝也可自行指定路径支持Git、SSH、Http(s)等多种协议Git协议通常最快git clone -b 分支名 网址一般默认拷贝master分支可加-b指定分支名2、查看所有远程主机git remote参数含义-v显示远程主机的网址show 主机名查看指定远程主机add 主机名 网址添加远程主机rm 主机名删除远程主机rename 原名称 新名称修改主机名3、将远程的更新取回本地git fetch 远程主机名 远程分支名将当前分支的FETCH_HEAD指向本次拉取的commit内容所取回的更新使用FETCH_HEAD或者远程主机名/分支名读取例取回origin的master分支更新后手动与当前分支合并git merge FETCH_HEAD 或者 git merge origin/mastergit fetch 远程主机名 远程分支名:本地分支名拉取远程的指定分支并在创建一个本地分支保存4、拉取远程更新并合并git pull 远程主机名 远程分支名:本地分支名git pull 远程主机名 远程分支名 //与当前分支的合并冒号及之后可省略 git pull 远程主机名 //当前分支与远程分支存在追踪关系远程分支名可省略 git pull //当前分支只有一个追踪分支主机名也可省略可采用rebase模式合并git pull --rebase 远程主机名 远程分支名:本地分支名可以粗略的看作是fetch和merge命令的集合git fetch origin git merge origin/master若远程删除了某个分支默认不会在拉取远程分支时删除对应的本地分支加上参数 -p 就会在本地删除远程已经删除的分支git pull -p # 等同于下面的命令 git fetch --prune origin git fetch -p5、推送本地更新到远程git push 远程主机名 本地分支名:远程分支名git push 远程主机名 本地分支名 //推送到与本地分支存在追踪关系的远程分支远程不存在则新建 git push 远程主机名 //当前分支与远程分支存在追踪关系 git push //当前分支只有一个追踪分支 git push --set-upstream 远程主机名 远程分支名 //与远程分支建立追踪关系 git push -u 远程主机名 本地分支名 //若当前分支与多个远程存在追踪关系可指定一个作为默认主机 //之后可直接git push推送 git push --force 远程主机名 本地分支名 //慎用! 可简写为-f,远程与本地分支存在差异强制推送 git push --all 远程主机名 //将本地所有分支推送到远程主机 git push 远程主机名 :远程分支名 //推送空的本地分支到远程分支即删除远程分支 git push 远程主机名 --delete 远程分支名 //删除远程分支参考自git远程操作详解八、标签1、查看所有标签git tag2、查看标签详情git show 标签名不是时间排序而是字母排序3、创建本地标签git tag 标签名参数含义-a 标签名创建附注标签可缺省缺省时创建轻量级标签不记录创建者-s 标签名创建PGP签名标签-m “注释”添加标签注释-a为前置-d 标签名删除本地标签commitID指定commit默认是HEAD例:git tag -a v1.0.0 -m Release version 1.0.0 26e2d034、将标签推送到远程git push 远程主机名 标签名推送本地全部标签git push 远程主机名 --tags5、删除远程标签(1) 删除本地标签git tag -d 标签名(2) 删除远程标签git push 远程主机名 :refs/tags/标签名git push 远程主机名 -d 标签名同-d等效于推送空值到远程高效删除九、储藏1、临时存储工作区内容git stash参数含义save “注释”给本次储藏添加注释-m “注释”push 文件路径只储藏指定的文件 (git 2.13版本)2、查看储藏git stash list //查看所有的储藏 git stash show stash{$num} //查看指定储藏的内容缺省则使用第一个存储即stash{0}3、提取储藏git stash pop stash{$num} //取出并应用最新的储藏 git stash apply stash{$num} //应用储藏的内容但不取出4、丢弃储藏git stash drop stash{$num} //丢弃指定的储藏 git stash clear //删除所有缓存的stash十、补丁1、生成patch补丁git diff xxx.patch //生成工作区的patch git diff commitID1 commitID2 xxx.patch //生成该commit的patch生成的patch不会包含commit的信息git format-patch HEAD^ //生成最近一个提交的patch git format-patch HEAD^^ //生成最近两个提交的patch git format-patch -n //生成最近n个提交的patch(-1 同 HEAD^); git format-patch -m -n //生成版本m到版本n之间提交的patch; [commitM, commitN] git format-patch -n commitID //生成该提交前n个提交的patch(包含该提交); [commitN, commitID] git format-patch commitID //生成自该提交到HEAD的patch(不包含该提交); (commitID, HEAD] git format-patch commitID1..commitID2 //生成两个提交间的patch(左开右闭); (commitID1, commitID2]生成的patch将包含对应commit的信息自动生成的patch文件示例0001-xxx.patch参数含义-o xxx/指定输出目录–stdout xxx.patch指定所有修改输出到标准输出可转接到同一个文件中2、应用patch补丁git apply xxx.patchgit apply 不会生成新提交打完patch后需要手动提交参数含义–stat查看patch情况–check检查补丁是否能打上–reject强制打补丁生成.rej文件包含合并失败的内容git am xxx.patchgit am 无法应用git diff 生成的patchgit am 会主动生成新提交且提交作者是patch的作者参数含义–abort丢弃patch内容退回到打patch之前–continue解决完冲突后接着打完patch–resolved同–continue参考自如何用git命令生成patch和打patch