您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

专为技术写作人员提供的七条 Git 技巧

时间:2023-07-30 14:27:58  来源:  作者:

作为 ATIX 的技术作家,我的任务包括为 Foreman 创建和维护存放在 Github.com/theforeman/foreman-documentation 的文档。Git 帮助我跟踪内容的版本,并与开源社区进行协作。它是我存储工作成果、共享和讨论改进的重要工具。我主要使用的工具包括浏览器、用 OpenSSH 连接 Foreman 实例、用 Vim 编辑源文件,以及使用 Git 进行版本控制。

本文重点介绍在开始使用 Git 和为 Foreman 文档做贡献时经常遇到的挑战。适用于中级 Git 用户。

先决条件

你已在系统上安装和配置了 Git。你至少需要设置用户名和电子邮件地址。

你在 github.com 上拥有一个帐户。GitHub 本身并不是一个开源项目,但它是许多开源 Git 存储库的托管站点(包括 Foreman 的文档)。

你已将 foreman-documentation 存储库复刻到你自己的账户或组织(例如,github.com/<My_User_Account>/foreman-documentation,这里 <My_User_Account> 是你的 GitHub 用户名)。

你已将你的 SSH 公钥添加到 GitHub。这是将你的更改推送到 GitHub 所必需的。

对 Foreman 文档做出贡献

Foreman 是一个开源项目,依靠社区的贡献而发展壮大。该项目欢迎所有人的参与,并且只有一些要求才能做出有意义的贡献。这些要求和惯例在 README.md 和 CONTRIBUTING.md 文件中有详细记录。

以下是在处理 Foreman 文档时最常见的一些任务。

我想开始贡献 Foreman 文档

1、从 github.com 克隆存储库:

$ git clone git@github.com:theforeman/foreman-documentation.git $ cd foreman-documentation/

2、重命名远程存储库:

$ git remote rename origin upstream

3、可选:确保你的本地主分支跟踪 theforeman 组织的 foreman-documentation 存储库的 master 分支:

$ git status

这将自动将你置于默认分支(本例中为 master)的最新提交上。

4、如果你的账户或组织中尚未有该存储库的 复刻Fork,请创建一个。前往 github.com/theforeman/foreman-documentation 并点击 “复刻Fork” 按钮。

5、将你的复刻添加到你的存储库中:

$ git remote add github git@github.com:<My_User_Account>/foreman-documentation.git

你的本地存储库现在有两个远程存储库:upstream 和 github。

我想扩展 Foreman 文档

对于简单的更改,比如修正拼写错误,你可以直接创建一个拉取请求(PR)。

1、创建一个分支,例如 fix_spelling。git switch 命令用于切换当前所在的分支,-c 参数用于创建分支:

$ git switch -c fix_spelling

2、进行你的更改。

3、添加你的更改并进行提交:

$ git add guides/common/modules/abc.adoc $ git commit -m "Fix spelling of existing"

良好的 Git 提交消息的重要性无需再强调。提交消息告诉贡献者你做了哪些工作,因为它与代码库的其余部分一起保存,所以它在查看代码时起到历史注释的作用,帮助了解代码的演化过程。有关优秀的 Git 提交消息的更多信息,请参阅由 cbeams 撰写的 《创建完美的 Git 提交信息的 7 条规则》。

4、可选但建议的操作:查看并验证与默认分支的差异。foreman-documentation 的默认分支称为 master,但其他项目可能有不同的命名(例如 mAIn、dev 或 devel)。

$ git diff master 5、将分支推送到 GitHub。这将发布你的更改到你的代码库副本: $ git push --set-upstream github fix_spelling

6、点击终端中 Git 提供的链接来创建一个拉取请求(PR):

remote: Create a pull request for 'fix_spelling' on Github by visiting: remote: https://github.com/_My_User_Account_/foreman-documentation/pull/new/fix_spelling

7、在解释中说明社区为什么应该接受你的更改。对于修正拼写错误等简单 PR,这并不是必需的,但对于重大更改则很重要。

我想将我的分支变基到 master

1、确保你的本地 master 分支跟踪的是 github.com/theforeman/foreman-documentation 的 master 分支,而不是你自己命名空间下的 foreman-documentation:

$ git switch master

此时应该显示 Your branch is up to date with 'upstream/master',其中 upstream 是指向 github.com/theforeman/foreman-documentation 的远程存储库的名称。你可以通过运行 git remote -v 来查看远程存储库设置情况。

2、从远程获取可能的更改。git fetch 命令会从远程下载被跟踪的分支,并且使用 --all 选项可以同时更新所有分支。在使用其他分支时这是必要的。--prune 选项会删除对已不存在的分支的引用。

$ git fetch --all --prune

3、将可能的更改从 upstream/master 拉取到你的本地 master 分支。git pull 命令将跟踪的分支上的提交复制到当前分支。这用于将你的本地 master 分支“更新”为远程(在本例中为 GitHub)master 分支的最新状态。

$ git pull

4、将你的分支 变基rebase 到 master。

$ git switch my_branch $ git rebase -i master 我在 master 分支上意外地提交了代码

1、创建一个分支来保存你的工作:

$ git switch -c my_feature

2、切换回 master 分支:

$ git switch master

3、回退 master 分支上的最后一次提交:

$ git reset --soft HEAD~1

4、切换回 my_feature 分支并继续工作:

$ git switch my_feature 我想修改我的提交消息

1、如果你的分支只有一次提交,可以使用 git amend 来修改你的最后一次提交:

$ git commit --amend

这假设你没有将其他文件添加到暂存区(即,没有运行过 git add My_File,并且没有进行提交)。

2、使用 --force 选项将你的 “更改” 推送到 GitHub,因为 Git 提交消息是你现有提交的一部分,所以你正在更改分支上的历史记录:

$ git push --force 我想重新整理单个分支上的多个更改

1、可选但强烈推荐:从 GitHub 获取更改。

$ git switch master $ git fetch $ git pull

这确保你将其他更改按照它们被合并到 master 中的顺序直接合并到你的分支中。

2、若要重新整理你的工作,请对你的分支进行变基并根据需要进行更改。对于将分支变基到 master,这意味着你需要更改你的分支上第一个提交的父提交:

$ git rebase --interactive master

使用你喜欢的编辑器打开变基交互界面,将第一个单词 pick 替换为你要修改的提交。

使用 e 来对你的提交进行实际更改。这会中断你的变基操作! 使用 f 将一个提交与其父提交合并。 使用 d 完全删除一个提交。 移动行以改变你更改的顺序。

成功进行变基后,你自己的提交将位于 master 上最后一个提交的顶部。

我想从其他分支复制一个提交

1、从稳定分支(例如名为 3.3 的分支)获取提交的 ID,请使用 -n 选项限制提交数量:

$ git log -n 5 3.3

2、通过挑选提交来复制更改到你的分支。-x 选项将提交的 ID 添加到你的提交消息中。这仅建议在从稳定分支挑选提交时使用:

$ git switch My_Branch $ git cherry-pick -x Commit_ID 更多技巧

在 ATIX,我们运行一个 GitLab 实例,用于内部共享代码、协作以及自动化测试和构建。对于围绕 Foreman 生态系统的开源社区,我们依赖于 GitHub。

我建议你始终将名为 origin 的远程指向你的内部的版本控制系统。这样做可以防止在纯粹凭记忆进行 git push 时向外部服务泄露信息。

此外,我建议使用固定的命名方案来命名远程。我总是将指向自己的 GitLab 实例的远程命名为 origin,将指向开源项目的远程命名为 upstream,将指向我在 Github 上的复刻的远程命名为 github。

对于 foreman-documentation,该存储库具有相对较平的历史记录。当处理更复杂结构时,我倾向于以非常可视化的方式思考 Git 存储库,其中节点(提交)指向线上的节点(分支),这些分支可以交织在一起。图形化工具如 gitk 或 Git Cola 可以帮助可视化你的 Git 历史记录。一旦你完全掌握了 Git 的工作原理,如果你更喜欢命令行,可以使用别名。

在进行具有大量预期合并冲突的大型变基之前,我建议创建一个“备份”分支,以便你可以快速查看差异。请注意,要永久删除提交是相当困难的,因此在进行重大更改之前,请在本地 Git 存储库中进行测试。

Git 对技术文档编写者的帮助

Git 对技术文档编写者来说是一个巨大的帮助。不仅可以使用 Git 对文档进行版本控制,还可以与他人积极地进行协作。



Tags:Git   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
解读那些令人困惑 Git 术语
我在 Mastodon 上进行了调查:你有觉得哪些 Git 术语很让人困惑吗?我计划写篇博客,来解读 Git 中一些奇怪的术语,如:“分离的 HEAD 状态”,“快速前移”,“索引/暂存区/已暂存”,“比...【详细内容】
2023-12-08  Search: Git  点击:(123)  评论:(0)  加入收藏
您有一篇Git 原理,请注意查收
前言作为一个新时代的开发者,想必大家在工作中,有一样东西是和大家「形影不离」的。那就是git。(当然,这里也有个例,如果大家项目还停留在svn阶段,就算我刚才的话唐突了)。无论大...【详细内容】
2023-10-24  Search: Git  点击:(192)  评论:(0)  加入收藏
一文看懂 Git 的底层工作原理
这是一篇能让你迅速了解 Git 工作原理的文章,实战案例解析,相信我,3 分钟,绝对能够有收获!Git 目录结构Git 的本质是一个文件系统(很重要,记住这句话,理解这句话),工作目录中的所有文...【详细内容】
2023-08-28  Search: Git  点击:(237)  评论:(0)  加入收藏
专为技术写作人员提供的七条 Git 技巧
作为 ATIX 的技术作家,我的任务包括为 Foreman 创建和维护存放在 github.com/theforeman/foreman-documentation 的文档。Git 帮助我跟踪内容的版本,并与开源社区进行协作。它...【详细内容】
2023-07-30  Search: Git  点击:(275)  评论:(0)  加入收藏
如何解决 Git 合并冲突
在遇到合并冲突时,请不要惊慌。通过一些娴熟的技巧协商,你可以解决任何冲突。假设你和我正在共同编辑同一个名称为 index.html 的文件。我对文件进行了修改,进行了提交,并将更改...【详细内容】
2023-05-31  Search: Git  点击:(323)  评论:(0)  加入收藏
在 Git 中撤消更改的六种方法!
当使用 Git 进行项目代码管理时,难免会出现一些错误操作或需求变更,需要对代码进行撤销或修改。Git 提供了多种方式来撤消已有的更改。本文将介绍 Git 中常用的 6 种撤消更改...【详细内容】
2023-04-26  Search: Git  点击:(405)  评论:(0)  加入收藏
开始使用 Git 和 GitHub 的十个简单步骤
通过本指南进入 Git 和 GitHub 的世界!了解如何通过 10 个简单步骤设置存储库和分支以及提交和推送更改。Git和 GitHub 已成为想要在软件项目上进行协作、跟踪更改和管理版...【详细内容】
2023-03-11  Search: Git  点击:(176)  评论:(0)  加入收藏
每个开发人员都应该知道的 11 大 Git 命令
Git 是一种版本控制系统,已成为全球开发人员的必备工具。它允许开发人员跟踪对项目代码库所做的更改,与同一代码库上的其他人协作,并在必要时回滚更改。以下是每个开发人员都应...【详细内容】
2023-03-08  Search: Git  点击:(150)  评论:(0)  加入收藏
Google 和 Facebook 为什么不用 Git 管理源码?
1摘要本文给大家剖析了一个有趣的现象:IT 业界使用最广泛的版本管理系统 Git,却不被硅谷领先的科技公司 Google、Facebook 等垂青的原因。分析了 Google 的版本和分支管理模式...【详细内容】
2021-05-17  Search: Git  点击:(541)  评论:(0)  加入收藏
了解一下 Fossil,一个 Git 的替代品
Fossil 是一个集版本控制系统、bug 追踪、维基、论坛以及文档解决方案于一体的系统。&bull; 来源:linux.cn &bull; 作者:Klaatu &bull; 译者:Xiaobin.Liu &bull;(本文字数:5047,...【详细内容】
2021-03-01  Search: Git  点击:(505)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条