和Git相关的一些问题

1. Git拉取项目的两种方式以及区别

方式

  1. Http:通过http方式的clone项目,不需要在git上手动绑定ssh,只需要在clone的时候输入账号,密码即可;
  2. SSH:通过ssh方式clone项目,需要手动绑定ssh密钥

区别

  1. Http方式适合匿名访问,适合开源项目,可以方便被别人克隆和读取(但没有push权限);
  2. SSh方式适合内部项目开发,只要配置了SSH key即可自由实现clone和push操作。

2. git rebase和git merge

git rebase和git merge命令处理的是同样的问题,这两个命令都用于把一个分支的变更整合进另一个分支——只不过他们达成同样目的的方式不同。

 现在,假设在 master 分支上的新提交与你正在开发的 feature 相关。需要将新提交合并到你的 feature 分支中,你可以有两个选择:merge 或者 rebase。

Merge 方式

最简单的方式是通过以下命令将 master 分支合并到 feature 分支中:

git checkout feature
git merge master

这会在 feature 分支中创建一个新的 merge commit,它将两个分支的历史联系在一起,请看如下所示的分支结构:

使用 merge 是很好的方式,因为它是一种 非破坏性的 操作。现有分支不会以任何方式被更改。这避免了 rebase 操作所产生的潜在缺陷(下面讨论)。

另一方面,这也意味着 feature 分支每次需要合并上游更改时,它都将产生一个额外的合并提交。如果master 提交非常活跃,这可能会严重污染你的 feature 分支历史记录。尽管可以使用高级选项 git log 缓解此问题,但它可能使其他开发人员难以理解项目的历史记录。

Rebase 方式

作为 merge 的替代方法,你可以使用以下命令将 master 分支合并到 feature分支上:

git checkout feature
git rebase master

这会将整个 feature 分支移动到 master 分支的顶端,从而有效地整合了所有 master 分支上的提交。但是,与 merge 提交方式不同,rebase 通过为原始分支中的每个提交创建全新的 commits 来 重写 项目历史记录。

 rebase 的主要好处是可以获得更清晰的项目历史。首先,它消除了 git merge 所需的不必要的合并提交;其次,正如你在上图中所看到的,rebase 会产生完美线性的项目历史记录,你可以在 feature分支上没有任何分叉的情况下一直追寻到项目的初始提交。这样可以通过命令 git loggit bisect 和 gitk 更容易导航查看项目。

但是,针对这样的提交历史我们需要权衡其「安全性」和「可追溯性」。如果你不遵循 [Rebase 的黄金法则],重写项目历史记录可能会对你的协作工作流程造成灾难性后果。而且,rebase 会丢失合并提交的上下文, 你也就无法看到上游更改是何时合并到 feature 中的。

对比

建议使用 git rebase。

rebase可以给你提供一套清晰的代码历史。相反的, merge会给你一套乱七八糟的代码历史。当你看到这样的代码历史的时候,我相信你绝对没有心情去研究每一个历史对应的代码。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端安全问题及解决方案

随着互联网的高速发展,信息安全问题已经成为行业最为关注的焦点之一。总的来说安全是很复杂的一个领域,在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,还时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。…

new Vue后整个的流程

文章目录 new Vue后整个的流程Vue.js 创建应用程序流程概述使用 new Vue() 创建Vue 实例流程概述 new Vue后整个的流程 new Vue({el: #app,render: h > h(App),data() {return {message: hello vue}} }).$mount(#app)Vue.js 创建应用程序流程概述 在使用 Vue.js 创建一个应…

大佬总结入职阿里,软件测试常见基础题绝不能忘

什么是软件测试? 正向思维:验证程序是否正常运行,以及是否达到了用户预期的需求。 逆向思维:通过执行测试用例发现程序的错误和缺陷。 关键字:正常运行、用户需求、发现错误。 软件测试的目的是什么? 找出软…

windows电脑hbuilderx打包iOS app及上架app store教程

ios应用,无法像安卓应用一样,上传到自己的服务器让互联网用户下载进行安装,所以需要将生成的app上传到app store,然后用户到app store安装app。 由于官网的教程是使用mac电脑生成证书和上架的,但是很多使用hbuilderx打…

笔记本安装双系统ubuntu时踩的坑——戴尔

如果你遇到以下的这些问题,不要直接装了,无解!!! 建议看我另一篇教程,把硬盘取出来在另外的电脑上装好系统再放回去,这样嘎嘎快。 移动硬盘中安装Ubuntu 20.04系统——立省99%的问题_放风筝的…

【产品应用】一体化步进电机在全自动纸张分切机的应用

全自动纸张分切机是现代印刷业中的重要设备之一,它能够将大的纸张切割成相同大小的小纸张,并具有高精度、高速度和高效率等优点。一体化步进电机作为全自动纸张分切机的重要部件,其应用对于提高设备的性能和稳定性具有重要意义。 01.设备简介…

HTML转EXE工具(HTML App Build)永久免费版

HTML转EXE工具(HTM2EXE)在CSDN上发布时间轴: 序号时间链接12022-08-17HTML转EXE工具(HTML App Build)初始版22023-02-18HTML转EXE工具(HTML App Build)最新版32023-06-23(实际未发布…

【Linux 驱动篇(一)】字符设备驱动开发

文章目录 一、字符设备驱动简介二、字符设备驱动开发步骤1. 驱动模块的加载和卸载2. 字符设备注册与注销3. 实现设备的具体操作函数3.1 能够对 chrtest 进行打开和关闭操作3.2 对 chrtest 进行读写操作 4. 添加 LICENSE 和作者信息 三、Linux 设备号1. 设备号的组成2. 设备号的…

多媒体库SDL以及实时音视频库WebRTC中的多线程问题实战详解

目录 1、概述 2、开源跨平台多媒体库SDL介绍 3、开源音视频实时通信库WebRTC介绍 4、在国产化Linux桌面系统中遇到的SDL多线程问题 5、在给WebRTC新增外部音频插件库时遇到的多线程问题 6、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅&#xf…

校园wifi网页认证登录入口

很多校园wifi网页认证登录入口是1.1.1.1 连上校园网在浏览器写上http://1.1.1.1就进入了校园网 使 用 说 明 一、帐户余额 < 0.00元时&#xff0c;帐号被禁用&#xff0c;需追加网费。 二、在计算中心机房上机的用户&#xff0c;登录时请选择新建帐号时给您指定的NT域&…

SpringBoot中集成Redis

目标 在原有SpringBoot项目中&#xff0c;集成Redis&#xff0c;并实现Dao层&#xff0c;Service层&#xff0c;Controller层。 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</…

端口映射的作用?如何在路由器上做端口映射

一、端口映射作用 路由器中设置端口映射的主要作用&#xff0c;就是让Internet上的其他用户&#xff0c;可以访问你路由器下面电脑中的数据(软件、文件)。 当家里的电脑使用路由器上网后&#xff0c;在Internet下的其它电脑、手机等网络设备&#xff0c;将无法自接访问你电脑…