Sprite keep learning - fork
type: channel
link: https://shezw.com/tag/fork/
items: Git工作流协作的一些经验，分支、合并、提交，推送，移除历史

Git工作流协作的一些经验，分支、合并、提交，推送，移除历史
type: item
date: 2021-02-24T17:35:00+08:00
description: 版本管理在编程中的重要程度不言而喻，其中git工作流也是最主流的方式，接下来总结一下git工作流中的一些比较实用的概念和具体方法。 在实际使用中，我还是用图形软件 sourcetree为主，不过图形软件只是为了方便，并且有很多用法还是要实用命令行来解决，所以要先理解概念，再熟悉命令，最后使用工具。 最常规的几个命令 init, add, rm, status, diff, commit 分别用来 新建仓库、添加、删除、查看概览、比较更改，提交更改。 基本上有这几个命令就可以顺利进行本地仓库的“备份”了。 clone, pull, push 是基于网络管理仓库比较常用的命令，用于 复制仓库，拉取更新，推送更新到服务器。 在git工作流中，协作的重要性是很高的，随着项目规模的升级，以及更多的人使用项目（fork），基于协作的共同维护就很有意义了。 这里主要有两个协作方式 1. 成为维护开发者 2. 创建分支、提交推送 第二种方式，不仅可以用于为源仓库贡献代码，也可以作为“定制化”开发的一种可行途径。这时候如果觉得自己开发的某些代码对于源仓库也有价值，可以再考虑贡献回去。 在github中，成为协作者主要是使用invitation功能，成为维护开发者之后，就可以和创建人一起管理仓库了。 当没有足够认可成为维护开发者，或者只是希望做一些定制化开发留为己用的时候呢，可以使用GitHub的fork功能。 这里我设计了一张图来诠释fork时，repo之间的关系。 在fork之后，实际上我们不必把自己的仓库当成是树枝，当我们创建完分支后，两个仓库已经是对等的了。我们可以向源仓库推送更新，也可以把源仓库的更新当做推送方，合并到自己的仓库中。 在github中，两个仓库之间的拉取是很简单的，无论是希望推送，还是希望从源仓库更新都适用这个拉取。 如果是希望更新就将两个仓库的顺序对转然后进行对比。 之后就根据需要进行合并操作就可以了。 如果是贡献代码，那么需要源仓库开发者通过并且选择再合并。我们更新则是自己来通过。 移除所有记录中的文件 git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch THE_FILE_PATH' --prune-empty --tag-name-filter cat -- --all git push --force