【前端工程化指南】Git常见操作之协作相关操作

news2024/11/20 4:50:11

获取远程仓库的更新

我们可以使用 git fetch 或者 git pull 两个命令从远程仓库获取最新的提交和分支信息,两者区别如下:

  • git fetch:该命令将远程仓库的最新更改下载到本地,但不会自动合并到当前分支。你可以随后使用其他命令(如 git merge 或者 git rebase)来合并或应用这些更改。
  • git pull:该命令从远程仓库获取最新更改,并自动将其合并到当前分支。它实际上是 git fetchgit merge 的组合操作。

git fetch

git fetch [<remote_repo>] [<branch>] [--all] [--prune] [--tags] [--prune] [--dry-run] 
  • <remote_repo>(可选):指定要获取更新的远程仓库的名称,不指定则拉取当前仓库的更新。
  • <branch>(可选):指定要获取更新的远程仓库分支的名称,不指定则拉取当前分支的更新。
  • --all(可选):获取所有远程仓库的更新。
  • --prune(可选):在获取更新时,删除本地仓库中已经不存在于远程仓库的引用,以保持同步。
  • --tags(可选):同时获取远程仓库中的标签。
  • --dry-run(可选):模拟运行,显示将要获取的更新,但不会实际执行获取操作。
  • --depth=<number>(可选):通过指定 <number> 来限制获取的深度,即需要获取更新的仓库的提交记录数量,如果不指定则将获取完整的更改记录。

git pull

git pull [<remote_repo>] [<branch>] [--rebase] [--no-rebase] [--ff-only] [--ffy] [--no-commit] [--squash] [--autostash]
  • <remote_repo>(可选):指定要获取更新的远程仓库的名称,不指定则拉取当前仓库的更新。
  • <branch>(可选):指定要获取更新的远程仓库分支的名称,不指定则拉取当前分支的更新。
  • --rebase(可选):使用变基(rebase)而不是合并(merge)来合并远程分支的更改。变基可以产生一个更整洁的提交历史,但也可能导致冲突更难以解决。使用git pull --rebase可以在拉取远程更改之前将本地提交变基到远程分支的顶部。
  • --no-rebase(可选):禁用变基选项,强制使用合并(merge)来合并远程分支的更改。这是git pull命令的默认行为。
  • --ff-only(可选):只允许快进合并(fast-forward merge)。如果远程分支的历史可以直接应用到本地分支而不需要创建新的合并提交,那么合并将会成功。如果不能进行快进合并,则会失败。
  • --ff(可选):尝试进行快进合并,如果无法进行快进合并,则不进行合并。
  • --no-commit(可选):拉取远程更改后不自动生成合并提交。这个选项可以让你在合并之前进行其他操作,例如检查更改或解决冲突,然后手动提交合并结果。
  • --squash(可选):将所有拉取的提交压缩成一个单独的提交。这个选项适用于你想要将远程更改合并为一个更高层次的提交的情况。
  • --autostash(可选):在拉取之前自动储藏(stash)当前分支上的未提交更改,并在合并后重新应用这些更改。这对于在拉取过程中避免冲突非常有用。

推送

当你把更改提交到本地仓库后,可以使用 git push 命令将这些更改推送到远程仓库,这样其他协作者就可以看到并获取你的更改。

下面是git push命令的一般用法:

git push <remote_repo> <branch> [-u] [-f] [--all] [--tags] [--dry-run]
  • <remote_repo>(可选):指定推送到远程仓库的名称,不指定则为当前仓库。
  • <branch>(可选):指定推送到远程仓库分支的名称,不指定则为当前分支。
  • -u--set-upstream(可选):在推送的同时,将本地分支与远程分支进行关联。这样,下次你可以直接使用git push命令进行推送,而不需要显式指定远程仓库和分支。
  • -f--force(可选):强制推送更改,即使这样可能会覆盖其他人的提交。这个选项应该谨慎使用,因为它可能会导致数据丢失或冲突。只在你确信需要覆盖远程分支的情况下才使用它。
  • --all(可选):推送所有分支到远程仓库。默认情况下,git push只会推送当前分支。使用该选项可以将所有本地分支推送到远程仓库。
  • --tags(可选):推送标签到远程仓库。标签是用于标记特定提交的引用。使用该选项可以将本地的标签推送到远程仓库。
  • --dry-run(可选):模拟推送操作,而不进行实际的推送。这个选项可以让你在推送之前预览将要进行的操作,以确保没有意外的结果。

合并

合并(Merge)是将一个分支的更改合并到另一个分支的操作。在Git中,有几种合并策略可以使用,具体取决于你想要实现的合并结果。

快进合并

快进合并(Fast-forward merge)当一个分支的提交历史可以直接应用到另一个分支时,Git会执行快进合并。这种合并不会创建新的合并提交,而是简单地将目标分支指向源分支的最新提交。这种合并只适用于目标分支没有自己的新提交的情况。

# 切换到目标分支
git checkout main
​
# 执行快进合并
git merge Feature

普通合并

普通合并(Regular merge)当两个分支都有新的提交时,Git会执行普通合并。这种合并会创建一个新的合并提交,它有两个父提交,代表了两个分支的更改。在合并过程中,Git会尝试自动解决冲突,但如果有冲突无法自动解决,你需要手动解决冲突后再进行提交。

# 切换到目标分支
git checkout main
​
# 执行普通合并
git merge Feature

递归合并

递归合并(Recursive merge)是一种特殊的普通合并,它在多个分支之间存在合并关系时使用。当你在一个分支上合并另一个分支,而另一个分支又合并了其他分支时,就会发生递归合并。在这种情况下,Git会创建一个新的递归合并提交,它有多个父提交,代表了多个分支的更改。

# 切换到目标分支
git checkout Main
​
# 执行递归合并
git merge Fix_Bug Feature

需要注意的是,合并可能会引起冲突, 特别是当两个分支在相同的文件的相同位置进行了不兼容的更改时。在这种情况下,Git会标记冲突,并将冲突的文件标记为未解决状态,你需要手动解决冲突,然后使用git add命令将解决后的文件标记为已解决,最后执行git commit提交合并结果。

变基

变基(rebase)操作是 Git 中的一种常见操作,它允许将一个分支的提交应用于另一个分支上,从而改变提交历史的结构,变基操作实际上是通过将一系列提交复制到另一个基准上来实现的

在变基操作中,你会选择一个基准分支,以及目标分支,然后将基准分支的提交复制到目标分支上。这样可以使目标分支的提交看起来好像是基于基准分支的最新状态进行开发的。

下面是变基操作的一般步骤:

  1. 确保你在基准分支上进行操作:首先,确保你位于要进行变基操作的基准分支上(假设你要将dev变基到main,那么你应该位于dev分支),可以使用 git branch 命令查看当前分支,并使用 git checkout 命令切换到基准分支。
  2. 执行变基操作:运行 git rebase 命令,指定要进行变基操作的目标分支。例如,你要将dev变基到main,那么你应该位于dev分支,并且运行 git rebase main
  3. 解决冲突(如果有):在变基过程中,如果存在冲突,Git 会暂停变基操作,并提示你解决这些冲突。你需要手动编辑文件,解决冲突后,使用 git add 命令将文件标记为已解决。
  4. 完成变基操作:当所有冲突都解决完毕后,使用 git rebase --continue 命令继续变基操作,或者使用 git rebase --abort 命令放弃变基操作。
  5. 合并分支:切换分支到目标分支,然后执行git merge命令,指定要合并的基准分支。例如你要将dev变基到main,这个步骤中,你应该位于main分支,并且运行 git merge dev

交互式变基

通过 git rebase --interactive 命令,你可以打开一个文本编辑器进行交互式变基操作,文本编辑器将显示当前分支的提交历史,并允许你对每个提交进行操作,例如修改提交消息、合并、删除或重新排序提交等

命令的语法如下:

git rebase --interactive <branch>
  • <branch>(可选):指定目标分支。

运行该命令后,Git 将打开一个文本编辑器,并显示一个类似于以下的界面:

pick 3f4b03e Commit message 1
pick b2a5c1d Commit message 2
pick 8de1a2f Commit message 3
​
# ...

每个提交都以 pick 开头,后面是提交的哈希值和提交消息。在编辑器中,你可以对每个提交进行以下操作:

  • pick:保持提交不变。
  • reword:修改提交消息。
  • edit:编辑提交的内容。
  • squash:将该提交合并到前一个提交中,并将提交消息合并为一个。
  • fixup:将该提交合并到前一个提交中,但丢弃提交消息。
  • drop:移除该提交。

在编辑器中进行适当的修改后,保存并关闭编辑器,Git 将按照你的修改执行相应的操作,并重新应用提交历史。

高级变基操作

假设我们有一个示例存储库,其分支如下:

o---o---o---o---o  main
     \
      o---o---o---o---o  featureA
           \
            o---o---o  featureB

featureB 基于 featureA,但是featureB 其实并不依赖于 featureA 的任何更改,我们想要把featureB从feature A分离出来,应用到main分支中。此时就需要使用--onto高级变基命令!

// 切换到featureB分支
git rebase --onto main featureA featureB
// 切换到main分支
git merge featureB

执行高级变基操作后,分支如下:

                  o---o---o  featureB
                 /
o---o---o---o---o  main
     \
      o---o---o---o---o  featureA

高级变基命令的语法如下:

git rebase --onto <newbase> <oldbase> <branch>
  • <newbase>(可选):指定变基后的目标分支,所有变基操作的提交将被复制到该分支。如果不提供 <newbase> 参数,则默认为当前分支。
  • <oldbase>(可选):指定变基操作的起点。如果不提供 <oldbase> 参数,则默认为当前分支的上一个提交。
  • <branch>(可选):指定要进行变基操作的分支。如果不提供 <branch> 参数,则默认为当前分支。


点击链接或微信搜索“汪啊汪” ,关注我及时掌握最新动动态

完整手册可关注该仓库,如有帮助,麻烦给个✨

该站点也会同步更新,已满足PWA,您可安装到桌面随时访问

转载需要经过本人同意,并标明出处!

本文由mdnice多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1707426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电子围栏(地理围栏)设计逻辑

做完整的项目时需要考虑安全问题&#xff0c;判断车辆在不该出现的位置出现时自动刹车。 只能说可以有吧。 地理围栏的概念 自动驾驶地理围栏是指在自动驾驶系统中定义的一种虚拟边界&#xff0c;用于限制车辆的运行范围。地理围栏可以通过全球定位系统&#xff08;GPS&#…

超详细Lambda表达式与Stream流及Maven环境搭配

目录 1.什么是Lambda表达式 2.为什么使用Lambda表达式 3.Lambda表达式语法 4.语法糖 5.Stream流 5.1stream流是什么 特点 5.2为什么要用Stream 5.3Stream流中的静态方法 6.Maven(项目编译打包软件) 6.1什么是Maven 6.2为什么要使用Maven 6.3Maven 中的相关概念 6.…

Android应用开发之AndroidManifest.xml

一.AndroidManifest.xml介绍 1.定义 AndroidManifest官方解释是应用清单&#xff08;manifest意思是货单&#xff09;&#xff0c;每个应用的根目录中都必须包含一个&#xff0c;并且文件名必须一模一样。 它是Android程序的全局配置文件&#xff0c;是每个 android程序中必须…

Java入门基础学习笔记45——String使用的注意事项

String使用时的注意事项&#xff1a; 1&#xff09;String对象的内容不可改变&#xff0c;被称为不可变字符串对象。 Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are im…

最新百度专用站群seo官网程序源码二级泛程序

发布站专用站群SEO推广网站源码支持泛解析无限扩张功能&#xff1a; 1、支持伪静态功能&#xff0c;减少生成静态页增加网站内容&#xff0c;比动态网站更有利于网站收录。 2、支持百度seo优化效果&#xff0c;主动提交百度收录&#xff0c;可生成sitemap.xml文件提交百度减少…

企业内网终端监控管理软件有哪些?推荐4款企业终端监控管理软件

企业内网终端监控管理软件是一种专为企业内部网络设计的安全与管理工具&#xff0c;旨在帮助企业管理、监控和保护其内部网络中的各种终端设备&#xff0c;如个人电脑、笔记本、移动设备等。 这类软件的主要功能包括但不限于以下几个方面&#xff1a; 1&#xff0c;实时监控&a…

总结常见漏洞的代码审计方法

前言 这篇文章主要是总结一下在安全工作中常见漏洞的代码审计方法&#xff0c;以及修复方案&#xff0c;希望能对初学代码审计小伙伴们有所帮助&#xff0c;笔芯♥️ 代码审计的思路 通常做代码审计都是检查敏感函数的参数&#xff0c;然后回溯变量&#xff0c;判断变量是否可…

探索Solana链上DApp开发:高性能区块链生态的新机遇

Solana 是一个新兴的区块链平台&#xff0c;致力于为 DApp&#xff08;去中心化应用程序&#xff09;开发者提供高性能、低成本的解决方案。Solana 的独特之处在于其创新性的共识机制和高吞吐量的网络&#xff0c;使得开发者可以构建高度可扩展的 DApp&#xff0c;并为用户提供…

如何在Python 中如何导入和引用外部文件(Colab VS Code)

1. 上传文件 在 Google Colab 中&#xff0c;从左侧界面的文件选项中使用 "Upload" 按钮上传文件。 在 VS Code 中&#xff0c;通过菜单栏中的 "File" -> "Open File/Folder" 选项上传文件&#xff08;建议将所有文件放入一个文件夹中&#…

Linux--进程间通信(2)(有名管道)

目录 1.原理 2.创建命名管道 3.使用命名通道实现简单的通信 4.使用创建的命名管道 1.原理 匿名管道没有名称&#xff0c;它们是通过句柄在父进程和子进程之间传递的。这意味着匿名管道只能用于具有父子关系的进程之间。 但如果程序之间没关系&#xff0c;那么这时候就要用…

向传音手机学习产品市场定位与产品需求定义

2024 年第一季度全球智能手机发货量同比增长 11%&#xff0c;排在第一名的是三星&#xff0c;占比 21%&#xff0c;苹果占比 17% 排在第二位&#xff0c;小米 14%排在第三名&#xff0c;传音手机10% 排在第四位&#xff0c;OPPO为 9% 排在第五名。 「非洲之王」传音手机表现十…

增强创作者能力:The Sandbox 首届 “创作者挑战” 回顾

首届 "创作者挑战" 为创作者在平台上赚取收入提供了难得机会。 我们发起 “创作者挑战” 的目的是支持创作者&#xff0c;赋予他们构建元宇宙的能力。我们提出三大行动号召&#xff1a;发布、参与和赚钱。新推出的「参与奖池」&#xff08;Engagement Pool&#xff0…

灵动微单片机洗衣机方案——【软硬件开发支持】

RAMSUN英尚以洗衣机洗涤主驱电机为例&#xff0c;主驱电机和多电机控制首选MM32SPIN0280.灵动微电子能够提供完整的软硬件开发支持&#xff0c;目前方案已经在主流家电厂出货。 洗衣机方案 皮带洗衣机 DD直驱洗衣机 波轮洗衣机 Mini壁挂和桌面洗衣机 洗涤烘干双变频方案 热泵烘…

【机器学习】利用机器学习优化陆军战术决策与战场态势感知

&#x1f512;文章目录&#xff1a; &#x1f4a5;1.引言 &#x1f6f4;2.机器学习在陆军战术决策中的应用 &#x1f6e3;️2.1数据收集与预处理 &#x1f304;2.2模型构建与训练&#xff1a; &#x1f305;2.3实时决策支持&#xff1a; &#x1f305;2.4代码实现 &…

C++学习日记 | LAB 6 static library 静态库

资料来源&#xff1a;南科大 余仕琪 C/C Program Design LINK&#xff1a;CPP/week06 at main ShiqiYu/CPP GitHub 一、本节内容 本节主要介绍静态库和动态库。 1.1 静态库和动态库的概念 静态链接和静态库(也称为存档)是链接器将所有使用的库函数复制到可执行文件的结果。静…

2024儿科常用心理评估量表汇总,附详细操作步骤与评定标准

在社会的快速发展以及家庭教育模式的转变下&#xff0c;儿童心理健康问题正逐步成为公众瞩目的焦点。焦虑症、抑郁症、适应障碍等儿科常见的症状&#xff0c;不仅对孩子的身心健康构成威胁&#xff0c;更可能在他们的学习旅程和社交互动中制造重重障碍。 儿科医师常用评估量表…

联想打印APP添加打印机方法

联想打印APP添加打印机操作方法&#xff1a; 1、在手机上下载“联想打印”APP&#xff1b; 2、打开“联想打印”APP,然后在软件内右下角找到“我的”图标并选择&#xff1b; 3、点击“请登录/注册”&#xff1b; 4、勾选“我已阅读并同意”然后在上面填写手机号码后&#xff0…

H6246 60V降压3.3V稳压芯片 60V降压5V稳压芯片IC 60V降压12V稳压芯片

H6246降压稳压芯片是一款电源管理芯片&#xff0c;为高压输入、低压输出的应用设计。以下是对该产品的详细分析&#xff1a; 一、产品优势 宽电压输入范围&#xff1a;H6246支持8V至48V的宽电压输入范围&#xff0c;使其能够适应多种不同的电源环境&#xff0c;增强了产品的通用…

WMS仓库管理系统是怎么操作的?WMS操作流程详解

WMS 是仓库管理系统(Warehouse Management System) 的缩写。通过标准化的来料管理、拣配管理、仓库管理&#xff0c;打造实时化、透明化、可视化的仓储管理体系。一款合格的wms系统具有以下优势 提供实时可视性和自动化仓储流程&#xff0c;帮助企业更好地应对复杂的供应链网络…

多张图片上传、图片回显、url路径转成File文件

1. 实现 背景&#xff1a;在表单中使用element-plus实现多张图片上传(限制最多10张)&#xff0c;因为还要与其他参数一起上传&#xff0c;所以使用formData格式。 编辑表单回显时得到的是图片路径数组&#xff0c;上传的格式是File&#xff0c;所以要进行一次转换。 <tem…