Git:一文学会Git命令,从初级到高级。

一、常用操作

掌握下面几个命令就可以玩转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 来恢复。

具体恢复步骤如下:

  1. 首先使用 git reflog 命令,它会列出所有的引用日志,从中找到被删除分支最后一次提交的哈希值。在输出中,会有每次操作的简短描述以及对应的提交哈希。
  2. 找到哈希值后,使用 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 命令,它是交互式变基的操作,能让你灵活地处理提交历史。下面为你详细介绍操作步骤:

  1. 确定要合并的提交范围
    假设你当前位于想要操作的分支上,若要合并最近的 n 个提交(包括当前提交),可以执行 git rebase -i HEAD~n 。
  2. 编辑交互界面
    执行上述命令后,会弹出一个文本编辑器窗口,显示类似如下的内容:
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=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值