阅读 3323

通过命令行玩转Git,需要记住那些命令?

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

Git 简介

什么是 Git ? Git 是目前世界上最先进的分布式版本控制系统!!!什么?啥意思?不懂,没关系,你只要记住,它很重要,非常重要,程序猿的必备技能即可。

Git 的命令非常非常多,这里强调一下,不要傻傻的去背这些命令,没啥卵用,有些命令可能你这辈子你都未必使得上。

本章的目的是教你如何通过命令行完成 Git 的日常基操,并会适当介绍命令的意义,加深你的理解。

在介绍这些命令之前,我们先来看一张灰常重要的图:

image.png

图中有四个空间,是 Git 工作流程的精髓所在,分别是:

  • Remote: 远程仓库,即你在 Github 或者 Gitee 等平台上创建的项目仓库;
  • Repository: 本地仓库,你可以认为就是我们拉取项目后生成的 .git 文件夹;
  • Index: 暂存区,事实上它只是一个文件,即 .git 文件夹里面的 index 文件,它保存即将提交到本地仓库的文件列表信息;
  • workspace:  工作区,即你在 VS code 或者 WebStorm 编译器正在编写的代码。

Git 基本命令手册

1.克隆/拉取项目

拉取项目是开始搬砖的第一步,一般创建好项目远程仓库,你就能获取到一个 .git 结尾的地址,或者这个地址可能由公司同事给到你,之后你随便找个目录,通过 Git Bash 输入下面命令即可拉取到项目到本地。

git clone 你的项目地址.git
复制代码

2.查看远程分支

一般拉取完项目后,我们是处于 master/main 主分支,不要着急就去编写代码,先要查看一下项目的远程分支情况,根据要求看是否需要切换到某个分支进行特定开发。

git branch -r
复制代码

3.查看本地分支

一般本地创建的分支情况应该是和远程分支一一对应,当然,在未进行发布或者和远程分支建立关联,本地分支并不会影响到远程分支,你可以随意创建、删除和修改。

git branch
复制代码

4.创建本地分支

git branch dev(分支名称, 可以随便取)
复制代码

通过上面的命令,你会创建好一个本地分支,当然,该分支是基于你当前所在分支创建的。你可以再次敲命令去查看远程分支和本地分支各自的情况(多敲,很快命令就记住了-^〇^-)。

5.删除本地分支

对远程仓库分支并不会有任何影响

git branch -d dev
复制代码

6.切换分支

创建好本地分支,我们就可以切换到该分支上。

git checkout dev
复制代码

创建和切换两个操作也可以一起做: git checkout -b xxx (创建并切换到该本地分支)

7.发布本地分支到远程分支

当我们创建好一个本地分支的时候,这个时候还是不要着急去开始编码,我们要把该分支发布到远程仓库去,让远程仓库也拥有该分支,且让它和你本地分支进行关联,方便我们后续直接进行 git pull 或者 git push 操作。

git push origin dev
复制代码

发布完本地分支后,你可以同样通过 git branch -r 去查看你远程仓库的分支列表是否多了新的分支。

8.建立本地分支与远程分支的关联

本地分支与远程分支关联这步不是必须,但后续就能很方便的直接使用 git pull 或者 git push 获取或提交该分支的代码,而不用去指定分支。

git push --set-upstream origin dev
复制代码

如果你不关联两者分支的关系,强行去使用,你可能会遇到图中的情况,大致意思就是让你指定目标分支或者去关联分支情况再进行操作。(Git 的提示信息还是很友好的)

image.png

9.添加文件进暂存区

完成上面的几步,我们就能开始搬砖了。在对代码更改后,要把提交代码到远程仓库,我们就要先把代码添加到暂存区,之后提交到本地仓库,最后才能提交到远程仓库。

  • 把工作区某个文件添加进暂存区,比如 src/main.js 文件,则 git add src/main.js
git add xxx(文件路径)
# 多个
git add xxx(文件路径) xxx(文件路径) xxx(文件路径) ...
复制代码
  • 把工作区更改的所有文件都添加进暂存区
git add .
复制代码

这里你可能会在想,为什么要先添加到暂存区,再本地仓库之后才提交到远程仓库呢? 如果你是从 SVN 转过来,可能会稍微有点不了解暂存区,这里涉及暂存区的意义,网上有很多解释,这里就不做过多的解释了。
但你可以简单的怎么理解,假如你在开发中开发了用户的添加功能和文章的添加功能,两个功能都同时开发完了,因为都互不影响,完全独立,你想分成两次提交分别写上对应的 commit 信息说明,这个时候就可以使用到暂存区,先将用户添加功能添加到暂存区,然后 commit 到本地仓库,再进行文章添加功能的提交,最后在一起 push 到远程仓库即可。

10.删除文件出暂存区

当你误把文件添加进暂存区,也不要慌,有添加,就肯定有删除。

  • 把工作区某个文件删除出暂存区
git rm --cached xxx(文件路径)
复制代码
  • 清空暂存区,暂存区实质是 .git 目录下的 index 文件,将此文件删除,那么就认为暂存区被清空。
rm .git/index
复制代码

当然,这只是把暂存区中跟踪的文件移除而已,不会改动原文件的内容,原先更改的内容还在。

11.查看工作区与暂存区状态

这个命令用于查看工作区和暂存区的状态,能看到哪些文件被修改了,它修改后是否被暂存了,又或者还没有暂存。这个暂存的过程,专业的叫法是 Git tracked,也就是是否被跟踪。

git status
复制代码

通过下图,我们能查看到所有改动过的文件,绿色的文件是已经添加进暂存区的,红色的文件则是未添加到暂存区的,而且每个文件前都有对应的操作说明,如果是新文件则是 new file,修改的文件则是 modified,删除的是 deleted, 如果是未添加进暂存区的新文件,则没有。

image.png

12.提交暂存区文件到本地仓库

git commit -m "说明信息"
复制代码

通过上面的命令,我们就将暂存区的文件提交到本地仓库了,我们可以通过 git status 再次查看暂存区的情况。

image.png

Git 的提示真的是非常友好的。

13.查看提交记录

这个命令可以显示提交过的记录。

git log
复制代码

image.png

进入提交记录日志列表后,可以按 q 退出。

上面的命令会显示所有的 commit 记录,如果你想要显示最近几条记录,你可以通过 git log -n(n为数字, 可以随意指定) 命令完成。

14.提交本地仓库文件到远程仓库

git push
复制代码

执行这条命令的前提是进行过第7步骤才行哦。

把本地仓库文件提交到远程仓库后,我们再次查看提交日志。

image.png

15.拉取新代码

git pull
复制代码

这个命令同样也是建立在第7步骤之前的。

Git 进阶命令手册

记住上面15个命令,Git 的日常基操基本也满足了,当然现在各种编辑器功能强大,基本都集成了 Git 的可视化操作,不用命令行来操作,也完全没有问题。

但是程序猿使用命令行不是一件很酷的事情吗?不为别的,只为装13也是可以搞一搞的,哈哈哈。下面再来讲一些命令,虽然使用频率不高,但是也是很重要的。

1.查看全局的Git配置

git config --global -l
# or
git config --global --list
复制代码

2.查看全局用户名及邮箱

git config --global user.name
git config --global user.email
复制代码

3.设置全局用户名及邮箱

git config --global user.name "你自己的用户名"
git config --global user.email "你自己的邮箱"
复制代码

4.查看局部项目用户名及邮箱

要在当前项目根目录下执行。

git config user.name
git config user.email
复制代码

5.设置局部项目用户名及邮箱

要在当前项目根目录下执行。

git config user.name "你自己的用户名"
git config user.email "你自己的邮箱"
复制代码

6.删除远程仓库分支

这个命令对于一些未设有保护的分支来说,是挺危险的操作,要慎重执行。

git push --delete origin dev(分支名称)
复制代码

7.修改远程仓库分支名称

修改远程仓库分支的名称过程是:先修改本地分支名称 - 删除远程分支 - 重新发布本地分支到远程仓库

# 修改本地分支名称
git branch -m 旧分支名称 新分支名称
# 删除远程分支
git push --delete origin 分支名称
# 发布新分支
git push origin 新分支名称
# 重新建立关联
git push --set-upstream origin 新分支名称
复制代码

8.合并分支

合并分支是一个比较常见的操作了,当你在一个分支开发完新功能后,很多时候这些分支最终都要合并到 master/main 这个主分支上,这个主分支拥有所有分支的代码,并且它是稳定且在生产环境上跑的,所以在你确定要将分支合并到主分支上之前,一定要确保这个分支代码是没有问题。

# 切换到稳定的目标分支
git checkout master
# 更新最新代码,防止本地仓库对应分支代码不够新而出现问题
git pull
# 合并分支到本地仓库
git merge dev
# 发布合并后的新代码到远程分支
git push
复制代码

合并后,你可以通过 git log 去查看是否有相关的 commit 记录。

9.将A分支直接合并到B分支

git merge xxx(A分支名称) xxx(B分支名称)
复制代码

10.合并单个commit

有时候我们只想合并某一个 commit 来满足一些特定需要,这也是可以做到的。

# 切换到稳定的目标分支
git checkout master
# 合并某个commit到本地仓库
git cherry-pick xxx(commitId)
# 发布合并后的新代码到远程分支
git push
复制代码

commitId 是一个 commit 的唯一标识,你可以通过 git log 来找到它,它是一串很长不重复的字符。

image.png

当然,你也可以去到 Github 或者 Gitee 平台对应项目里面找。

合并单个 commit 你可能会遇到冲突的情况,如:在我执行合并某一个 commit 给我报了一个错,大致意思就是代码冲突了,需要去调整后,才能提交。

image.png

代码冲突是件非常蛋疼的事情,不仅仅合并的时候会发生冲突,比较频繁发生的场景是多人共同开发的时候,因为两人负责同个项目,就有极大的可能会改到相同的文件,相同的代码,这就会造成冲突。一般这个时候 Git 会阻止你的提交,让你先去整改,这时候就需要你非常谨慎细心的去处理,因为一旦粗心,就极有可能干掉同伴的代码或者自己的代码,这会造成很严重的后果。(不要问我怎么知道的,都是血的教训︶︿︶)

解决代码冲突一般我会借助编辑器等工具来完成,就不通过命令行操作了,这样比较方便,不容易出错。我使用的是 VS code 编辑器,在编辑器内冲突的文件一般都会标红,点开文件,会发现里面会有写 <<<< 的符号,被符号包围的内容就是冲突的地方。

image.png

编辑器一般会提供四个选项帮助你快速操作,当然你也可以手动删除修改。

  • Accept Current Change:接收当前更改,也就是冲突部分以旧的为准。
  • Accept Incoming Change:接受传入的更改,也就是冲突部分以新的为准。
  • Accept Both Changes:接受两个更改,也就是新旧都存在,可能会出现重复。
  • Compare Changes:比较变化,会分成两个文件,让你更直观的查看两者的冲突内容。

当你解决完冲突后,你可以保存文件,再执行以下操作,提交代码。

# 添加更改进入暂存区
git add .
# 提交暂存区到本地仓库
git commit -m ""
# 提交本地仓库commt到远程仓库
git push
复制代码

11.撤销最近的一个commit

git reset --soft HEAD^
复制代码

这个命令用于撤销本地仓库最近的一个 commit ,撤销后会回到暂存区中,通过 git log 可以查看 commit 记录会减少,但不影响远程仓库。

还有另一个相似的撤销 commit 命令,但它比较危险,撤销后的内容是直接就删除的,不会回到暂存区,要慎重使用!!!

git reset --hard HEAD^
复制代码

12.查看简洁提交记录

这个命令可以让你更加直观的查看你需要的信息。

git log --pretty=oneline
复制代码

image.png

其实这些信息都存放在 .git 文件夹中,在 .git\logs\refs\heads 下记录了所有分支的 commit 版本号。

13.备份工作区内容stash

这是一个神奇的命令,特别对项目分支比较多的情况,是非常有用的,他的使用场景大致是:当你正在A分支中开发功能,你临时接到一个紧急的需求,需要优先切换到B分支中去开发,这个时候A分支中已经改动的代码要怎么办呢?这时就能使用 stash 来备份代码了。

git stash
复制代码

执行命令后,当前工作区会回到最近的一次 commit 状态,并将更改的代码保存在 Git 栈中,这样你就能先切换到B分支中去开发,等B分支功能开发完成,再切换回A分支,通过下面的命令取回原来的更改的代码,继续进行A分支的功能开发了。

git stash pop
复制代码

是不是非常的 nice!!!

14.查看备份列表或清空备份列表

  • 显示Git栈内的所有备份
git stash list
复制代码
  • 清空Git栈
git stash clear
复制代码

15.查看远程仓库地址

git remote -v
复制代码

image.png

16.更改远程仓库地址

git remote set-url origin xxx(新仓库地址)
复制代码

更改远程仓库地址有另外的两种方式

# 删除项目的远程仓库地址
git remote rm origin
# 添加项目的远程仓库地址
git remote add origin xxx(新仓库地址)
复制代码

或者去改配置文件

17.比较工作区和暂存区的所有差异

git diff
复制代码

这个命令是对比工作区和暂存区的所有差异,但个人感觉不太直观,也可能只是比较少用吧,关于对比我更愿意借助编辑器工具来查看。

image.png

对比工作区单个文件和暂存区的区别:

git diff xxx(文件地址)
复制代码

18.将工作区中的文件还原成与暂存区的一致

git checkout xxx(文件地址)
# 批量还原
git checkout xxx(文件地址) xxx(文件地址) xxx(文件地址) ...
复制代码

总结

小编日常使用的 Git 命令就这些,虽然我一直坚持使用命令行的方式来操作 Git,但还是经不住工具的香,对于解决代码冲突、文件对比等操作我还是会优先选择借助编辑器工具集成的功能来解决,会更加直观、快速,也不容易出错。但是,这里强调一下,命令才是本质,适当了解掌握,百利而无一害,哈哈哈。



至此,本篇文章就写完啦,撒花撒花。

image.png

希望本文对你有所帮助,如有任何疑问,期待你的留言哦。
老样子,点赞+评论=你会了,收藏=你精通了。

文章分类
前端
文章标签