admin管理员组文章数量:1530018
1.使用环境
本文章是基于Linux环境下编写。
2.命令 git config --global
解释作用:
为什么先说git config --global,首先安装好git后,必须要配置一下用户名和邮箱,因为以后在下载有权限验证的远程仓库代码的时候,需要验证身份,这时候git会默认使用配置的用户名或者邮箱进行登录,然后让你手动输入密码。
配置用户名命令:
git config --global user.name "你自己的用户名"
配置邮箱命令:
git config --global user.email "你自己的邮箱"
查看当前用户名命令:
git config --global user.name
查当前邮箱命令:
git config --global user.email
config 和 --global 的作用:
config:参数是用来配置git环境的
--global:是配置git全局环境
温馨提示:不配置也行,当遇到要求登录权限的远程仓库会让你在手动输入用户名、邮箱、以及密码。
3.命令 git init
解释作用:
git init 命令是初始化本地仓库的,使用该命令后会在本地生成一个隐藏的.git文件夹。初始化当前目录为仓库,初始化后会自动将当前仓库设置为master,首先要自行创建一个空目录,我这里创建的是test空文件夹,进入目录。
初始化本地仓库命令:
git init
操作如下:
那么就有人会问,为什么我初始化了,却没有.git文件夹呢,因为该文件夹是隐藏属性,我们可以通过该下操作进行显示(Win11):
又或者在git中使用linux命令进行查看,命令如下:
ls -ah
该命令可以查看隐藏文件,具体操作如下:
4.命令 git add 和 git commit 和git status
在总结add和commit之前我先总结一下status,这个命令我看过很多博客都讲的不详细,接下来我先为大家讲一下git的基本框架和工作流程还有一些相关概念:
首先:
git的基本框架组成是由 WorkSpace(本地工作区)、Index/Stage(暂存区/缓存区)、Repository(本地仓库)、Remote(远程仓库)。
- WorkSpace(本地工作区):工作区是开发者实际进行操作的文件系统区域。它包含了项目的所有文件和目录,是你直接可以查看和编辑的地方。工作区的内容就是你本地硬盘上的项目文件。
- Index/Stage(暂存区/缓存区):早期的版本是Stage现在改为Index,当你使用
git add
命令时,文件的更改被添加到暂存区,就是此区域,暂存区就是前面提到的.git隐藏文件夹下的index就是存放缓存的。 - Repository(本地仓库):这部分是将文件从暂存区通过commit命令提交到此区域,.git这个整个文件夹就是本地仓库的所在地,里面有很多与本地仓库的相关文件。具体的.git我接下来会讲。
- Remote(远程仓库):远程仓库是存储在其他服务器上的 Git 仓库,它通常用来与团队成员共享代码。远程仓库可以有多个,通常会有一个被命名为
origin
的默认远程仓库。通过git push
命令,你可以将本地仓库的提交推送到远程仓库。通过git fetch
和git pull
命令,你可以从远程仓库获取更新,简单来说,远程仓库就是使用GItHub、Gitee等作为远程仓库。
其次:
工作机制单向流程图如下:
到目前为止,讲的这些一定要理清楚从WorkSpace到Remote的单向的工作流程 。
最后:
现在就可以为大家讲解一下status命令是干嘛的了,status命令是查看WorkSpace(本地工作区)和Index(暂存区)的状态。
具体来说,它会显示以下几方面的信息:
-
未跟踪的文件(Untracked files):这些是新创建的文件,还没有被 Git 追踪管理,也就是说它们没有被添加到版本控制中。
-
已修改但未暂存的文件(Changes not staged for commit):这些是已经被修改过的文件,但修改尚未被加入暂存区(使用
git add
)。 -
已暂存的文件(Changes to be committed):这些文件的修改已经被加入到暂存区,准备在下次提交时提交。
-
未合并的文件(Unmerged paths):在合并分支时,如果存在冲突,这些文件会显示在这里。
我为大家操作看一下:
- 第一种状态
在演示第二种状态之前,我就先把这个操作通过add和commit命令提交一下,各位自行操作,这里主要就讲解状态信息了。
- 第二种状态
- 第三种状态
第四种状态这里先不演示,等接下来讲解到分支的时候再去做演示。
总结:
这里用到了git add命令,git add就是将被操作的文件添加到暂存区。上面操作我们不难看出,当我们新建文件和操作文件但还没有add添加到暂存区的时候,颜色状态都是为红色,当我们add后,颜色随之变为绿色,这里一定要注意。
git commit命令是将暂存区的文件进行提交到Repository(本地仓库)中,也就是只有在颜色为绿色的时候,commit后,工作树随之为空,如图:
git commit -m "注释"
这里 -m的作用就是在提交的同时写提交信息,不加也可以,但提交的时候会让你输入信息,编辑器很难用,建议直接加上。
git commit --amend
这条命令是用于修改最近的一次提交。这个命令可以用来修改提交的信息(如提交消息),或者在提交中添加新的更改。以下是 git commit --amend
的一些常见用法:
修改提交消息
- 如果你刚刚提交了一个更改,但是发现提交信息写错了或不够准确,你可以使用
git commit --amend
修改提交信息。运行这个命令后,Git 会打开一个编辑器,你可以在编辑器中更改提交消息
添加遗漏的更改
- 如果你忘记将某些文件添加到暂存区,而这些文件应该包含在最近的提交中,你可以先将这些文件添加到暂存区,然后运行
git commit --amend
。这将把新的更改和之前的提交合并成一个新的提交。
git add <file1> <file2> # 添加遗漏的文件
git commit --amend # 修改最近的提交
注意事项
-
重新提交(Rewrite History):
git commit --amend
会创建一个新的提交,取代之前的提交。这意味着你会丢失之前的提交对象。如果你的提交已经推送到远程仓库,使用--amend
修改提交后,需要强制推送(git push --force
),因为远程仓库的历史记录和你的本地历史记录不再匹配。这里的强制推送,我会在后面详细讲解。
5.命令 git rm
这个命令就很简单,对文件进行删除。然后使用add命令提交一次就好了,这里要注意新版本git rm会自动帮我们进行add操作。验证的话可以自己尝试,rm后status会发现颜色是绿色。
6.命令 git log
git log 是查看历史版本信息,如下图:
我这里因为commit了好多次,每一次commit后,都会留下一次历史版本,注意,有没有发现,commit后面有一串字符,这串字符就是版本信息的唯一标识,他是40位的Hash码表示 。这40位的哈希码也是版本穿梭的重要标识。
7.命令 git reset 、 git revert 、git checkout -- 和 git restore
接下来我为大家讲解一下这些命令的区别和作用,这里作为一个这些命令的总结,因为我浏览众多博客,很多人都没有作总结性解释,这让我很头疼。
首先,先说一下他们的作用:
- git reset:
用于将当前分支的 HEAD
和暂存区(Index)重置到指定的状态。它可以修改提交历史和文件的暂存状态,因此在使用时需要特别谨慎。
为什么说特别谨慎,因为使用reset命令进行版本穿梭的时候,会丢失之前的版本信息,这会造成永久性丢失数据。这很危险。
他有三中模式,分别如下:
--soft
模式:
作用:仅重置 HEAD
到指定的版本,暂存区和工作区保持不变。
用途:通常用于改变最近的提交历史,而不影响文件内容和暂存区状态。
--mixed
模式(默认)
作用:重置 HEAD
到指定的版本,并清空暂存区的更改(即暂存区重置到与 版本一致),但工作区的更改保持不变。
用途:用于撤销一些提交并将更改返回到工作区,使你可以重新选择要暂存和提交的更 改。
--hard
模式
作用:重置 HEAD
、暂存区和工作区到指定的版本。
用途:彻底放弃对代码的所有未提交的更改(包括工作区和暂存区的更改)。
注意事项:
reset命令和revert可以撤销未add的、已经add未commit的、已经commit未push的、已经push的,这些细节。
- git revert:
用于创建一个新的提交,这个提交会撤销指定的过去提交的更改。与git reset不同,git revert是一种非破坏性的操作,不会修改提交历史,而是通过新提交的方式来逆转之前的更改。通常用于撤销已经推送到远程仓库的提交,尤其是在多人协作的项目中。因为它不会改变已有的提交历史,只是添加一个新的提交来反转之前的更改,所以可以安全地用于公共分支(如 main
或 master
分支)。
- git checkout --:
用于撤销工作区中某个文件或多个文件的未提交更改,将它们恢复到上一次提交的状态。这意味着所有在这些文件上所做的本地修改都会被丢弃。
注意事项:
他只能撤销未add的操作!
- git restore:
可以用于两种主要操作:
- 撤销工作区中的文件更改:恢复文件到上次提交的状态。
- 从暂存区(staging area)中撤销文件:将文件从暂存区移出,使其回到修改状态。
-
git restore
的常用选项
--staged
:只影响暂存区,将指定文件从暂存区移出。
--source <commit>
:将文件恢复到指定提交的状态。
-W
或 --worktree
:只影响工作区文件(这是默认行为)。
使用 git restore
的优势
- 明确的语义:相比
git checkout
,git restore
更明确地指示它的操作对象是文件的恢复和撤销。 - 简化的命令集:它专注于文件操作,而不用于切换分支(分支切换操作被
git switch
取代),这有助于减少误解和误操作。
8.命令 git reflog
git reflog命令是查看当前本地仓库的所有版本历史记录。
---------------------------------------------------------------------------------------------------------------------------------
接下来就是切换分支相关的命令
9.命令 git branch 和 git checkout
现在大家看到git checkout命令就会有疑惑了前面也出现过git checkout --命令,是用于撤销工作目录状态的命令,现在就讲他的另一个用法---->切换分支与创建分支。
命令如下:
git checkout 分支名称
会切换到指定的分支上。这是git checkout 命令但这条命令只能用于分支存在的情况下,同时他还有另一个作用,就是创建并切换分支。
命令如下:
git checkout -b 分支名称
这条命令多了个 -b的参数,其实就是指的-branch,是git branch命令的合并,我先讲解上面命令的用法,待会讲解git branch的作用,git checkout -b 就是分支不存在的时候会创建并且切换过去。
接下来为大家讲解一下git branch的命令,他也有四种种基本用法第一种就是什么参数都不带,命令如下:
git branch
这条命令是直接查看当前分支是处于哪条分支下。
第二种就是后面带分支名称,去创建分支,但是不切换过去,命令如下:
git branch 分支名称
同时,这里要引入另一个用法,加一个参数-a,就是查看当前本地仓库的所有分支,并且显示HEAD头指向哪个分支,命令如下:
git branch -a
接下来,他还有最后一种基本用法,删除分支,命令如下:
git branch -D 分支名称
顾名思义,加了一个-D的参数,其实就是delete嘛,是不是很容易记,总结一下,创建切换和删除分支的基本命令都在这。
10.命令 git merge 和 git rebase
这两个命令是分支合并的命令,我先给大家讲一下他们的区别,然后我再具体操作一下,验证一下。
git merge合并是通过合并后生成一个新的提交,提交后,历史版本的最新信息还是各自的最近提交信息,就是说HEAD依旧指向各自的最近提交历史记录。
git rebase合并是两个分支合并后提交,不是生成一个新的提交,合并后分支的历史最近提交记录是和master一致的,也就是说两个分支的HEAD都指向master。
命令如下:
git merge 要合并的分支名称
git rebase 要合并的分支名称
#在哪个分支下使用这个命令就是将要合并的分支名称和当前分支进行合并
我给大家验证一下:
这里要注意,大家在验证的时候,在分支下操作文件,要记得commit一下,不然切换分支的时候,本地仓库的所有分支都会共享此操作,commit后,该分支的操作就独属于该分支了。
这是还未合并下的主分支历史版本信息。
这里大家可以看到,HEAD指向master,因为我现在在master分支下,同时,另一个分支hotlast和master不是同一个历史记录,是单独的。接下来给他家测试git rebase命令:
这里大家可以看到,master和hot都在同一个历史记录中,同时,不会生成一个新的历史记录。其实,merge是合并操作,而rebase是分支変基操作。但宏观来讲,他们都是合并分支,rebase的历史记录更加简介,而merge会对一个合并记录,更适合团队合作。
在这里都是正常合并的情况下,有一种特殊的情况就是合并冲突,我简单来讲一下,什么是合并冲突,就比如果,在master分支上,一个文件被操作后提交的内容是123,同时另一个dev分支操作文件提交的内容是124,此时,要是合并,那git应该最后的结果是123呢还是124呢,所以就出现了合并冲突,此时就需要自己手动解决冲突并合并,很简单,就是使用vim命令修改有冲突的文件,改成你自己想要的结果就好,然后在add和commit一次,就ok了。
这种事合并冲突的提示,然后下一步操作如下:
去手动修改内容,然后提交。ok!so easy!!!
---------------------------------------------------------------------------------------------------------------------------------这里是时候该为大家说明,为什么git为什么要有分支,分支是不是也有分类,对的,这些都很重要。
分支的好处
- 同时并进行多个功能开发,提高了开发效率
- 各个分支再开发过程中,如果某个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可
在 Git 中,分支是版本控制的核心概念,用于管理不同的开发路径。根据用途和生命周期,分支可以分为多种类型。以下是常见的 Git 分支分类:
1. 主分支(Main Branches)
main
或master
分支:- 用途:这是项目的主分支,通常用于存储稳定的、可发布的代码版本。
- 特点:一般直接从这个分支部署到生产环境,因此应该始终保持稳定状态。
2. 功能分支(Feature Branches)
- 用途:用于开发新功能或特性。每个功能通常在一个独立的分支上开发,完成后合并到主分支。
- 命名惯例:通常以
feature/
开头,例如feature/login-system
。 - 特点:功能分支是短期的,开发完成后会被合并到主分支并删除。
3. 修复分支(Bugfix or Hotfix Branches)
-
Bugfix 分支:
- 用途:用于修复开发中的错误,通常基于
develop
分支创建,修复完成后合并回develop
。 - 命名惯例:通常以
bugfix/
开头,例如bugfix/fix-login-error
。
- 用途:用于修复开发中的错误,通常基于
-
Hotfix 分支:
- 用途:用于修复生产环境中的紧急问题,通常基于
main
或master
分支创建。修复完成后,合并回主分支,并可能合并回develop
。 - 命名惯例:通常以
hotfix/
开头,例如hotfix/security-patch
。 - 特点:Hotfix 分支的生命周期很短,因为修复紧急问题的目的是尽快解决生产环境中的问题。
- 用途:用于修复生产环境中的紧急问题,通常基于
4. 开发分支(Develop Branches)
develop
分支:- 用途:用于整合所有功能分支和修复分支。
develop
是一个开发分支,它包含了所有正在开发的功能和修复。 - 特点:通常是较不稳定的分支,因为它包含了最新的开发工作,可能会有很多未测试的代码。
- 用途:用于整合所有功能分支和修复分支。
5. 发布分支(Release Branches)
- 用途:在准备发布一个新版本时,创建一个发布分支,用于最后的测试、修复和文档更新。
- 命名惯例:通常以
release/
开头,例如release/v1.2.0
。 - 特点:发布分支允许开发团队在准备新版本时进行一些最后的调整而不影响
develop
和master
分支。完成后,发布分支会被合并到master
和develop
,然后删除。
6. 实验分支(Experimental Branches)
- 用途:用于尝试新想法或技术实验。实验分支可能永远不会被合并回主分支,主要是为了验证概念或进行技术探索。
- 特点:没有严格的命名规则,但应清楚标明是实验性质,以避免混淆。
7. 临时分支(Temporary Branches)
- 用途:用于一次性任务,如重构、批量修改或快速调试等。通常是临时性的,任务完成后会被删除。
- 特点:临时分支不应该包含重要的功能或修复,因为这些任务通常不会经过完整的测试流程。
8. 长期分支(Long-lived Branches)
- 用途:在某些项目中,会有一些长期存在的分支,比如用于维护旧版本的
maintenance
分支。 - 特点:这些分支会长期存在,通常用于维护和支持旧版本的代码,修复旧版本中的错误或添加小的改进。
总结
Git 中的分支分类方法帮助开发团队更好地管理代码和开发流程。不同类型的分支用于不同的开发目的,这样团队可以并行工作而不干扰彼此的工作,同时保持代码库的稳定性和可维护性。
---------------------------------------------------------------------------------------------------------------------------------接下来就是远程仓库的相关命令,后续会持续更新,请收藏加关注!谢谢咯。
干饭...............................
版权声明:本文标题:Git基础常用命令总结----------超级详细! 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1726491368a1072760.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论