Day28|将 GitHub 的档案抓取下来到自己的本地端 - git pull 指令与冲突时的解决方法

上篇介绍了如何将档案 Push 到 GitHub 後,今天就来练习如何从 GitHub 下载档案吧!
这些技巧都很适合也蛮常用在团队合作的时候喔!


Pull 指令

先看一下官方文件是如何说明 git pull 指令的。

👉 git-pull - Fetch from and integrate with another repository or a local branch

解释:git pull runs git fetch with the given parameters and calls git merge to merge the retrieved branch heads into the current branch.

从上述的说明来看,我们可以知道其实 git pull 指令就是由 git fetch 将档案从远端抓取下来,并使用 git fetch 指令将最新进度加到当前的分支。

因此我们可以记得:

👉 git pull = git fetch + git fetch

总结|Pull 指令是去上限抓东西下来(Fetch),并更新本机的进度(Merge)


# git fetch

假使远端的数据库有了新的 Commit 版本,需要将这些更新取回本地端,此时使用此指令。

$ git fetch [远端节点名称] 
范例: git fetch origin 

预设情况下,git fecth 会将所有有更新的分支取回,如有想指定特定的分支,也可以执行以下指令:

$ git fetch [远端节点名称] [分支名]

使用 git fecth 抓下来的更新,如果要在本地端读取的话,需要使用「远端节点名称 / 分支名」的格式读取。

例如:远端的节点名称为 origin、分支为 master,今天要将抓下来的分支合并到当前进度,那麽应该透过以下指令才有办法读取到最新进度:

$ git merge oringin/master

「远端节点名称 / 分支名」- oringin/master

💡 补充|查看分支指令 git branch 搭配各种参数

如果想知道我们抓取下来的远端分支,可以使用 -r 参数查看。

$ git branch -r # 检视远端分支

-a 参数则可以查看所有分支。

$ git branch -a # 检视所有分支

上述除了使用 merge 来合并之外,也可使用 Rebase 指令来合并。

加上 --rebase 参数

$ git pull --rebase #使用 rebase 模式合并抓取档案

Rebase 的优点在於不会产生额外的 Commit 来纪录合并这个动作。


执行 git pull 指令发生冲突

通常会发生冲突的原因在於,目前远端分支上的 Commit 版本,比你本地端来的新,如此一来会判别本地端的版本较旧就会推不上去。

范例:

生命魔法团队是由

  1. 水之精灵 - 龟人团长
  2. 地之精灵 - 艾草 aka 阿妲玛
  3. 喵(火)之精灵 - 娜奴烙诗
  4. 风之精灵 - 希尔芙Chuyin

四个人组成。

今天我们要一起做一个专案,共同在 GitHub 一起用了一个数据库。

--

情境:

龟人团长与艾草阿妲玛两人差不多同时在 GitHub 上下载了一份档案准备进行开发。因为龟人团长动作比较快写好专案了,因此已经先 Push 到 GitHub 上。结果後来艾草阿妲玛终於完成他负责的部分,准备要上传到 GitHub 的时候 ....

「咦!?Why~~为何推不上去」艾草阿妲玛崩溃的想、砸键盘。

--

方法一|先拉再推

看到崩溃的艾草阿妲玛,娜奴烙诗查看情况,才发现原来是发生了「git pull 冲突」。

於是乎,娜奴烙诗找到了解决办法告诉艾草阿妲玛:

「艾草~~不用担心啦~~让我来告诉你怎麽解决吧!」

「你可以使用先拉再推的方式」

「再一次执行将远端的资料拉下来,这样龟人团长上传的进度也会加到你的本地端,解决你比较旧的问题,这时候你就可以再把你的专案推出去了」

💡 执行程序码:

$ git pull --rebase

--rebase 参数表示「内容抓下来之後请使用 Rebase 方式合并。

方法二|谁管你先,就要按照我的来!

在远方的希尔芙Chuyin看到艾草阿妲玛和娜奴烙诗两人待在一起讨论,忍不住好奇心也跑过来看。了解大致情况後,希尔芙Chuyin也告诉艾草阿妲玛说他也有个办法,不过还是不推荐啦!毕竟有点可怕(希尔芙Chuyin 的魔力控制的比较不好QQ...)

「你可以不要理会规则呀!直接使用 -f 参数,告诉 Git 强制将你的档案推上去,这样你就可以顺利将档案推上去啦!不过....这也会把龟人团长上传的档案给覆盖掉啦....如果你们两个不会争执就好....」

💡 执行程序码:

$ git push -f
$ git push -force

-f 参数或 -force 参数都可以使用。

--

艾草阿妲玛听到原来有这些方法後,心情很开心,她最後选择了第一个方法,也才避免魔法界可能发生的腥风血雨战争,守护和平是当前重要的事。


补充说明 |git push -f 指令

此指令的好处是在於它可以无视规则,你想推就推,但也因为这样,容易导致专案管理的难处。

因此使用这指令时要非常小心,要知道自己在做什麽。

使用时机:

  1. 整理历史纪录
  2. 只有自己一个人专案时可使用
  3. 启动保护机制

--

为了魔法世界的和平,还是要好好跟其他组员沟通啦!
如果真的被盖掉了,那就请之前前一个进度的组员,再一次将正确的进度强迫推上去就可以了!


<<:  TailwindCSS 从零开始 - TailwindCSS 3.0.0-alpha.1 释出

>>:  Day 27 : 案例分享(8.1) 讯息、邮件与线上会议 - 单据通知及公司内部讨论

Angular#3 资料结构 (可略过)

Angular [目标] 了解 Angular资料结构 .Component 元件 安装 ng ge...

Day8 AR的硬体设备,简洁介绍LCD与OLED

最近几期会来谈谈AR硬体设备的一部分。要能够用肉眼看到这些虚拟的东西,当然得结合显示器、处理器、感测...

完结心得

第三年参加铁人赛,心态上比起前两年稳定许多。即使如此,过程中仍然有些遗憾,可以写得更好但没有达成。 ...

Day 17 : 笔记篇 04 — 写笔记就像是在种树,在 Obsidian 中实作 Evergreen Note (长青笔记) 的概念

前言 这是 Obsidian 使用教学 — 笔记篇的第 4 篇文章。 在前面文章中,我介绍了许多写笔...

[Day 6] 非监督式学习 K-means 分群

非监督式学习 K-means 分群 今日学习目标 非监督式学习 何谓非监督式学习? 集群分析? 分群...