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

2024-05-28 21:04

本文主要是介绍【前端工程化指南】Git常见操作之协作相关操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

获取远程仓库的更新

我们可以使用 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多平台发布

这篇关于【前端工程化指南】Git常见操作之协作相关操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1011686

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加