news 2026/7/31 17:44:03

Git常用命令 个人总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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取消暂存, 文件状态为Modified
Git 有三种工作区域: 工作目录(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 vim

ubuntu下默认的编辑器为nano,将其修改为vim

二、基础命令

1、git 帮助命令

git help // 常用git命令 git help <command> // 显示该命令的帮助文档 git help -a // 显示可用命令 git help -g // 帮助向导

2、初始化本地git仓库

git init

3、查看git存储状态

git status

4、添加文件到暂存区

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单行显示注释 或者–pretty=oneline
–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提交的注释,提交内容不变

– reword

r 63ce9fb add 3 pick 8b485bb add 4 pick a75ed74 add 5

(2) 完全修改add 3提交

– edit

e 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) 合并提交

– squash

pick 63ce9fb add 3 s 8b485bb add 4 s a75ed74 add 5

提示编写新提交的注释
保存退出后add 3 到 add 5的提交都消失,只剩下新提交

– fixup

pick 63ce9fb add 3 f 8b485bb add 4 f a75ed74 add 5

类似squash的合并,但不会重新生成提交
会将add 4和add 5的提交都合并到add 3中,最后三个提交只保留add 3

命令含义
ppick = use commit
rreword = use commit, but edit the commit message
eedit = use commit, but stop for amending
ssquash = use commit, but meld into previous commit
ffixup = like “squash”, but discard this commit’s log message
xexec = run command (the rest of the line) using shell
ddrop = 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/master
git 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 -p

5、推送本地更新到远程

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 tag

2、查看标签详情

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" 26e2d03

4、将标签推送到远程

git push <远程主机名> <标签名>

推送本地全部标签

git push <远程主机名> --tags

5、删除远程标签

(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.patch

git apply 不会生成新提交,打完patch后需要手动提交

参数含义
–stat查看patch情况
–check检查补丁是否能打上
–reject强制打补丁,生成.rej文件包含合并失败的内容
git am xxx.patch

git am 无法应用git diff 生成的patch
git am 会主动生成新提交,且提交作者是patch的作者

参数含义
–abort丢弃patch内容,退回到打patch之前
–continue解决完冲突后,接着打完patch
–resolved同–continue

参考自:如何用git命令生成patch和打patch

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 17:43:05

git 详解-问题篇

git 详解-问题篇 平常找开源代码时&#xff0c;浏览 github 必不可少可选项&#xff0c;偶尔出现无法访问&#xff0c;本篇文章简单讲解如何恢复。某些时候需要团队协作&#xff0c;明明有代码访问权限&#xff0c;但却无法下载代码。提交代码时失败&#xff0c;提示仓库不存在…

作者头像 李华
网站建设 2026/7/31 17:40:53

SIOC测试是什么?亚马逊6A测试卖家必看的包装闯关全解

一、SIOC 通俗解读&#xff1a;不用外箱&#xff0c;原厂包装独自送货很多亚马逊卖家搜 SIOC&#xff0c;核心想弄懂&#xff1a;SIOC 全称 Ships In Own Container&#xff0c;中文叫商品原包装发货&#xff0c;配套官方测试就是ISTA 6-AMAZON SIOC 测试。 简单说&#xff0c;…

作者头像 李华
网站建设 2026/7/31 17:40:46

快速了解什么是反射

朋友&#xff0c;希望能帮助到你1.反射的主要类2.反射调用优化3.Class类分析4.Class常用方法5.获取Class对象的方式6.那些类型有Class对象7.类加载8.类加载阶段1.反射的主要类 Java.lang.Class:代表一个类&#xff0c;Class对象表示某个类加载后在堆中的对象Java.lang.reflect…

作者头像 李华
网站建设 2026/7/31 17:40:21

MusicFree插件架构深度解析与开发实战指南

MusicFree插件架构深度解析与开发实战指南 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 引言&#xff1a;开源音乐插件的技术演进 在数字音乐生态系统中&#xff0c;MusicFree插件系统代表了开…

作者头像 李华
网站建设 2026/7/31 17:40:01

Keil MDK软件仿真实现STM32虚拟串口调试全攻略

1. 从硬件依赖到纯软件调试&#xff1a;为什么我们需要无实物仿真 作为一名在嵌入式开发一线摸爬滚打了十来年的老工程师&#xff0c;我敢说&#xff0c;几乎每个搞STM32开发的人都经历过这样的窘境&#xff1a;项目进度紧&#xff0c;硬件板子还没打样回来&#xff0c;或者手头…

作者头像 李华