一、常用操作
掌握下面几个命令就可以玩转Git,轻松应对90%以上的需求。以下是实用主义型的Git命令列表。
git init # 初始化一个新的本地仓库
git clone # 从服务器上clone整个项目
git config # 管理配置用户信息
git branch # 用于管理分支
git checkout #切换分支
git status # 查看当前工作目录状态(比如哪些文件被修改、哪些未被跟踪等)
git diff # 比较差异
git add # 将文件添加到暂存区
git commit # 提交暂存区的文件到本地仓库,并记录提交信息
git push # 将本地仓库的修改推送到远程仓库
git pull # 从远程仓库拉取最新代码并合并到本地分支
git log # 查看提交历史记录
git tag # 打标签
Git的三个区 + 一个远程仓库
① Remote:远程仓库,像 github 就是一个远程仓库。
② Repository:本地仓库,通过 git clone 将远程仓库的代码下载到本地。代码库的元数据信息在根目录下的.git目录下。
③ Workspace:工作空间,就是我们写代码的目录。
④ Index:暂存区,指的是 .git 目录下的 index 文件。
接下来,进行实例操作,讲解如何使用 Git 拉取代码到提交代码的整个流程。
二、初级(使用频率高,难度低)
2.1安装 git
# centos中
yum install git
2.2 git init
初始化仓库
git init 命令用于在当前目录下初始化一个新的 Git 仓库。执行该命令后,Git 会在当前目录下创建一个名为 .git 的隐藏目录,这个目录包含了 Git 仓库的所有元数据和配置信息。
cd project
git init
# 也可以在服务器创建一个裸仓,可以用来作为中心节点
cd project
git init --bare
2.3 git clone
从服务器拉取代码
# git clone <远程仓库 URL> <本地目录名>
# 从远程服务器上拉去代码到 libin 目录下。
git clone https://github.com/username/test-project.git libin
# 也可以先 cd 切换到 libin 目录再拉去。
cd libin
git clone https://github.com/username/test-project.git
2.4 git config
查看当前仓库配置信息
# 查看当前仓库的所有配置信息
git config --list
# 查看用户邮箱
git config user.email
# 每次代码提交的时候都会生成一条提交记录,其中会包含当前配置的用户名和邮箱。
# 配置 name 和 email
git config user.name libin
git config user.email libinwendy@163.com
2.5 git branch
分支管理
创建、重命名、查看、删除项目分支, Git 做项目开发时,一般都是在开发分支中进行,开发完成后合并分支到主干。
# 查看当前项目所有的本地分支列表
git branch
# 查看所有分支,包括本地和远程分支
git branch -a
# git branch < 分支名>
# 创建一个名为 daily 的日常开发分支,分支名只要不包括特殊字符即可。
git branch daily
# 如果觉得之前的分支名不合适,可以为新建的分支重命名,重命名分支名为 dev
git branch -m daily dev
# 如果分支已经完成使命则可以通过 -d 参数将分支删除
# 这里为了继续下一步操作,暂不执行删除操作
git branch -d dev
# 强制删除一个还未被合并的分支 dev
git branch -D dev
2.6 git checkout
切换到已存在的某个分支
# 切换到 dev 分支,后续的操作将在这个分支上进行
git checkout dev
2.7 git status
查看当前 Git 仓库的状态
查看当前 Git 仓库的状态,包括工作目录和暂存区中文件的修改情况、文件是否被跟踪等信息。
在 Git 合并分支遇到冲突时,使用 git status 命令就能查看哪些文件发生了冲突。
# Changes not staged for commit:(改动文件未提交到暂存区)
git status
2.8 git add
添加文件变动到暂存区
# 通过指定文件名 <filename> 可以将该文件添加到暂存区,
git add <filename>
# add. 添加当前目录下的所有文件
git add.
2.9 git commit
提交文件变动到版本库
将暂存区的文件提交到本地仓库的命令。
# 通过 -m 参数可直接在命令行里输入提交描述文本,提交并添加有意义的提交说明
git commit -m '这里写:简短且有意义的提交说明'
2.10 git push
将本地仓库中的提交推送到远程仓库
# git push < 远程仓库名 > < 分支名 >
# origin 指代的是当前的git服务器地址,这行命令的意思是把 dev 分支推送到服务器。
git push origin dev
2.11 git pull
将服务器上的最新代码拉取到本地
从远程仓库获取最新的提交,并将其合并到当前所在的本地分支。它实际上是 “git fetch” 和 “git merge” 两个操作的组合。
一般在提交代码钱需要先从服务器拉取最新的代码。如果其它项目成员对项目做了改动并推送到服务器,而你本地的代码也有变动,拉取的代码就有可能会跟你本地的改动冲突,一般情况下 Git 会自动处理这种冲突合并,但如果改动的是同一行,那就需要手动来合并代码,编辑文件,保存最新的改动,再通过 git add .和 git commit -m ‘xxx’ 来提交合并。
git pull origin dev
3.12 .gitignore
文件
设置哪些内容不需要推送到服务器,这是一个配置文件
在项目最开始就需要配置这个文件,指定哪些文件目录不上传到服务器
然后进行 git add 操作
# .gitignore 不是 Git 命令,而在项目中的一个文件,通过设置 .gitignore 的内容告诉 Git 哪些文件应该被忽略不需要推送到服务器,通过以上命令可以创建一个 .gitignore 文件,并在编辑器中打开文件,每一行代表一个要忽略的文件或目录,如:
touch .gitignore
# 添加以下内容到.gitignore文件,意思是 Git 将忽略 demo.html 文件和 build/目录 等,这些内容不会被推送到服务器上
demo.html
build/
.idea/
doctor_offline/structed/
三、中级(使用频率适中,难度中等)
3.1 git merge
合并分支
如果当前所在分支是 main,要把 libin 分支合并到 main 分支,应该先切换到 main 分支(git checkout main),然后执行 git merge libin 。
git merge <分支名>
git merge libin
3.2 查看已合并的分支
这个命令会列出所有已经合并到当前分支(如果你在主分支上执行,就是列出已合并到主分支的分支)的本地分支。
git branch --merged
3.3 git log
查看版本提交记录
显示从最近到最远的提交日志,它会展示提交的哈希值、作者、提交日期以及提交说明等信息。
提交记录可能会非常多,按 J 键往下翻,按 K 键往上翻,按 Q 键退出查看
git log
git log <文件名>
3.4 git diff
查看本地分支与远程分支的差异
命令可以用来查看不同版本之间的差异。如果要查看两个提交之间的差异,可以使用 git diff < 提交哈希值 1> < 提交哈希值 2>
这样的形式。例如 “git diff abc123 def456” ,就能查看哈希值为 abc123 和 def456 这两个提交之间的差异。
git diff
git diff < 提交哈希值 1> < 提交哈希值 2>
3.5 git tag
为项目打标签,标记里程碑
将本地标签推送到远程仓库的命令是 git push <远程仓库名> <标签名>
。
如果你的远程仓库名为 origin
,你要推送名为 v1.0
的标签,就可以执行 git push origin v1.0
。
一次性把本地所有标签都推送到远程仓库,使用 git push <远程仓库名> --tags
,例如 git push origin --tags
。
# 当我们完成某个功能需求准备发布上线时,应该将此次完整的项目代码做个标记,并将这个标记好的版本发布到线上,这里我们以 v1.0.0 为标记名并发布.
git tag v1.0.0 # 轻量级标签
# 附注标签会包含更多信息,如标签创建者信息、日期、标签说明等
git tag -a v1.1 -m '附注标签:这是1.1版本的标签'
# 将本地标签推送到远程仓库
git push origin v1.0.0
# 一次性把本地所有标签都推送到远程仓库 origin
git push origin --tags`
3.6 git tag
删除远程仓库上的某个标签
git push <远程仓库名> :refs/tags/<标签名>
# 可简化成
git push <远程仓库名> --delete <标签名>
git push origin --delete v1.0
3.7 git show
查看某个提交的详细更改内容
git show
是用于显示各种类型对象(如提交、标签等)详细信息的命令。<提交哈希值>
指的是你想要查看的那个提交的唯一标识符。在执行git log
时,会显示出一系列的提交记录,每条记录开头的一大串字符就是提交哈希值。
git show <提交哈希值>
四、高级(使用频率相对低,难度高)
4.1 git restore
将暂存区的某个文件移除,使其回到未暂存状态
从 Git 2.23 版本开始引入了 git restore
命令,它可以更清晰地处理工作区和暂存区文件状态的恢复。--staged
选项表明操作是针对暂存区的,通过指定文件名就能把该文件从暂存区移除。
当然,在较旧的版本中也可以使用 git reset HEAD <文件名>
来达到相同的效果,不过现在更推荐使用 git restore
这种语义更明确的命令。
git restore --staged <文件名>
4.2 git reset
撤销上一次提交(但保留文件修改)
撤销上一次提交(但保留文件修改)的命令是 git reset --soft HEAD^
。
git reset
是用于重置当前 HEAD 指向的位置。--soft
选项表示只移动 HEAD 指针,保留工作区和暂存区的内容,也就是保留文件的修改。HEAD^
表示上一个提交,HEAD
指向当前所在的提交,HEAD^
就是它的父提交。
4.3 git reset
撤销工作区中某个文件的修改,使其恢复到上一次提交时的状态
--
是一个分隔符,用于明确告诉 Git 后面跟着的是文件名,以避免和分支名等产生混淆
。
git checkout --test.py
4.4 git reflog
会记录所有 HEAD 的更新操作,包括分支的创建、删除、切换等操作。
当不小心删除了某个分支时,可以利用 git reflog
来恢复。
具体恢复步骤如下:
- 首先使用
git reflog
命令,它会列出所有的引用日志,从中找到被删除分支最后一次提交的哈希值。在输出中,会有每次操作的简短描述以及对应的提交哈希。 - 找到哈希值后,使用
git branch <分支名> <提交哈希>
命令来重新创建该分支。例如,如果被删除的分支叫feature
,找到的哈希值是abc123
,就可以执行git branch feature abc123
来恢复这个分支。
4.5 git stash
暂时保存工作目录和暂存区中还未提交的修改
主要用于暂时保存工作目录和暂存区中还未提交的修改,以便你可以切换到其他分支去处理别的任务,之后再恢复这些修改继续工作。
下面为你详细介绍其相关用法:
- 保存修改:当你在当前分支上有一些未完成的修改,又需要切换到其他分支时,使用
git stash
或者git stash save "描述信息"
(添加描述信息能让你后续更清晰地知道这个暂存内容是什么),就可以把当前工作现场保存起来,工作目录会恢复到上一次提交时的干净状态。 - 查看暂存列表:使用
git stash list
命令,能看到所有暂存的记录,列表中会显示每个暂存的名称(如stash@{0}
)、对应的提交哈希以及保存时的描述信息。 - 恢复暂存内容:有两种常用方式。使用
git stash apply
可以恢复最近一次暂存的内容,但不会从暂存列表中删除该记录;若使用git stash pop
,它不仅会恢复内容,还会把对应的暂存记录从列表中移除。如果要恢复指定的暂存记录,可以在命令后面加上暂存名称,例如git stash apply stash@{1}
。 - 删除暂存记录:使用
git stash drop stash@{n}
可以删除指定的暂存记录,若想删除所有暂存记录,使用git stash clear
。
我现在问你,在 Git 中,如何查看某个文件的修改历史记录呢?
4.6 git rebase
修改已提交的注释
-
若要修改最近一次提交的注释,可使用
git commit --amend -m "新的提交注释"
。此命令会直接用新的注释替换掉上一次提交的注释,而不改变提交内容。 -
修改更早之前的提交注释,就可以借助
git rebase -i
(交互式变基),之后在弹出的文本编辑器中把要修改注释的提交前面的pick
改为reword
,保存退出编辑器后,再编辑新的提交注释。
4.7 已有本地分支,重新关联远程分支
git branch -u <远程仓库名>/<远程分支名> <本地分支名>
4.8 从远程分支创建新的本地追踪分支
git checkout -b <本地分支名> <远程仓库名>/<远程分支名>
4.9 把本地仓库的某个分支推送到远程仓库的一个不同名称的分支
git push <远程仓库名> <本地分支名>:<远程分支名>
4.10 合并多个连续的提交为一个提交
# 合并最近的 3 个提交
git rebase -i HEAD~3
在 Git 里要合并多个连续的提交为一个提交,可以使用 git rebase -i 命令,它是交互式变基的操作,能让你灵活地处理提交历史。下面为你详细介绍操作步骤:
- 确定要合并的提交范围
假设你当前位于想要操作的分支上,若要合并最近的 n 个提交(包括当前提交),可以执行 git rebase -i HEAD~n 。 - 编辑交互界面
执行上述命令后,会弹出一个文本编辑器窗口,显示类似如下的内容:
plaintext
pick 123abc First commit message
pick 456def Second commit message
pick 789ghi Third commit message
这里的 pick 表示要应用该提交。若要将后面的提交合并到第一个提交,就把第二行及以后的 pick 改为 squash 或者 s
,修改后如下:
plaintext
pick 123abc First commit message
s 456def Second commit message
s 789ghi Third commit message
pick 代表应用该提交,squash(s)
则表示将当前提交合并到前一个提交。
3. 保存并退出编辑器
保存并退出编辑器,接着 Git 会进入下一个编辑界面,让你编辑合并后的提交信息,你可以将多个提交信息整合为一个更合适的提交信息,然后再次保存并退出编辑器就完成了合并。
练习网站
https://learngitbranching.js.org/?locale=zh_CN&NODEMO=