Git常用命令讲解

最近工作时发现一个挺有意思的Git命令练习网址(https://learngitbranching.js.org)感兴趣的可以去挑战一下
下面是其中一些比较常用的命令

基础命令

1.Git Commit (提交代码,只是本地仓库)

​ Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!

​ Git 希望提交记录尽可能地轻量,因此在你每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。

​ Git 还保存了提交的历史记录。这也是为什么大多数提交记录的上面都有父节点的原因 —— 我们会在图示中用箭头来表示这种关系。对于项目组的成员来说,维护提交历史对大家都有好处。

修改代码库,并把这些修改保存成了一个提交记录 C2C2 的父节点是 C1,父节点是当前提交中变更的基础。
在这里插入图片描述

2.Git Branch(建立新的分支)

3.Git Checkout <分支名> (切换到指定的分支)

Git 的分支也非常轻量。它们只是简单地指向某个提交纪录。即使创建再多的分支也不会造成储存或内存上的开销,并且按逻辑分解工作到不同的分支要比维护那些特别臃肿的分支简单多了。 

新创建的分支 newImage 指向的是提交记录 C1

在这里插入图片描述

​ 在不同分支提交不会影响其他分支,git checkout <分支名> 来切换到指定的分支,再提交就是提交相应的分支数据

在这里插入图片描述

4.Git Merge (合并分支)

​ 在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”

Git Merge bugFix

在这里插入图片描述


在这里插入图片描述

​ 首先,main 现在指向了一个拥有两个父节点的提交记录。假如从 main 开始沿着箭头向上看,在到达起点的路上会经过所有的提交记录。这意味着 main 包含了对代码库的所有修改。↓↓↓

​ 还有,看见各个提交记录的颜色变化了吗?为了帮助学习理解,我引入了颜色搭配。每个分支都有不同的颜色,而每个提交记录的颜色是所有包含该提交记录的分支的颜色混合之后的颜色。

​ 所以,main 分支的颜色被混入到所有的提交记录,但 bugFix 没有。下面咱们让它也改变一下颜色。****

在这里插入图片描述

​ 因为 main 继承自 bugFix,Git 什么都不用做,只是简单地把 bugFix 移动到 main 所指向的那个提交记录。

​ 现在所有提交记录的颜色都一样了,这表明每一个分支都包含了代码库的所有修改!

5.Git Rebase ( 合并分支 )

git rebase是另一种合并分支的方法。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。

​ Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。

在这里插入图片描述

​ 现在 bugFix 分支上的工作在 main 的最顶端,同时我们也得到了一个更线性的提交序列。

​ 注意,提交记录 C3 依然存在(树上那个半透明的节点),而 C3’ 是我们 Rebase 到 main 分支上的 C3 的副本。

​ 现在唯一的问题就是 main 还没有更新,下面咱们就来更新它吧……

远程仓库操作命令

1.Git Clone(复制一个本地仓库到远程)

2.Git Fetch(获取远程数据)

C2,C3 被下载到了本地仓库,同时远程分支 o/main 也被更新,反映到了这一变化

在这里插入图片描述

git fetch 完成了仅有的但是很重要的两步:

  • 从远程仓库下载本地仓库中缺失的提交记录
  • 更新远程分支指针(如 o/main)

git fetch 并不会改变你本地仓库的状态。它不会更新你的 main 分支,也不会修改你磁盘上的文件。

​ 理解这一点很重要,因为许多开发人员误以为执行了 git fetch 以后,他们本地仓库就与远程仓库同步了。它可能已经将进行这一操作所需的所有数据都下载了下来,但是并没有修改你本地的文件。我们在后面的课程中将会讲解能完成该操作的命令 😄

3.Git Pull(获取远程数据,相当于git fetch 和 git merge 的缩写)

​ 既然我们已经知道了如何用 git fetch 获取远程的数据, 现在我们学习如何将这些变化更新到我们的工作当中。

​ 其实有很多方法的 —— 当远程分支中有新的提交时,你可以像合并本地分支那样来合并远程分支。也就是说就是你可以执行以下命令:

  • git cherry-pick o/main

  • git rebase o/main

  • git merge o/main

  • 等等

实际上,由于先抓取更新再合并到本地分支这个流程很常用,因此 Git 提供了一个专门的命令来完成这两个操作。它就是我们要讲的 git pull

git pull 就是 git fetch 和 git merge 的缩写! 分别执行和用pull是一样的,一般情况用pull就行,但如果要进行复制操作就得用拆开的命令组合。

4.Git Push

git push 负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。一旦 git push 完成, 你的朋友们就可以从这个远程仓库下载你分享的成果了!

​ 你可以将 git push 想象成发布你成果的命令。它有许多应用技巧,稍后我们会了解到,但是咱们还是先从基础的开始吧……

​ 注意 —— git push 不带任何参数时的行为与 Git 的一个名为 push.default 的配置有关。它的默认值取决于你正使用的 Git 的版本,但是在教程中我们使用的是 upstream。 这没什么太大的影响,但是在你的项目中进行推送之前,最好检查一下这个配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值