『Git 干货』#4 GitHub合作开发(简明)

访问博客查看 本文 最新内容,排版更美观ヾ(•ω•`)o 如有错误欢迎指出~

Git 系列学习笔记:

接上文,本文介绍了 Git 基于 GitHub 的使用,以及合作开发的注意事项。文章的最后还留下了一些待填的坑...

本文大部分内容参考了 RCY 同学的教程,部分参考了 廖雪峰教程-Git菜鸟教程-Git,以及 Git 官网文档 Git-Documentation

GitHub 合作开发

以下内容也适用于不同的服务器平台,如 Gitee、GitLab 等。

新建远程仓库

从 GitHub 上创建一个空仓库后,通常有三个选择:

  • 直接克隆到本地,会生成一个仓库文件夹,里面只有一个 .git 文件夹。可以在仓库文件夹中创作。
  • 本地新建一个同名文件夹,再创建本地仓库,添加远程仓库,推送并绑定上游分支。
  • 本地已有的一个仓库(确保同名),添加远程仓库,推送并绑定上游分支。

对于第一种方法,只需要 git clone 命令即可,对于第二种方法,GitHub 提供了一系列指引命令:

$ echo "# test" >> README.md
$ git init
$ git add README.md
$ git commit -m "first commit"
$ git branch -M main  # 重命名本地主分支,避免冲突,新版本特性
$ git remote add origin https://github.com/hewei2001/test.git
$ git push -u origin main  # 推送并绑定上游分支

对于第三种情况,只需完成后面三步即可。

.gitignore

在通过 GitHub 新建仓库时,我们会发现有个 Add .gitignore 按钮,这有什么用呢?实际上我们知道,维护真正项目时可能有一次修改会涉及到多个文件,这个时候一般大家会倾向于使用 git add . 的简单操作。

但是,并非所有文件都应该被放入 Git 仓库中,如:

  • IDE / 编辑器 的配置文件(如 .vscode、.idea 等);
  • 数据库文件;
  • 带有敏感信息的文件。

这和便利的命令形成了矛盾,为此出现了特殊文件 .gitignore,它可以决定哪些的文件不需要添加到版本管理中。一个样例如下:

# Python3 的缓存文件(预编译模块)
__pycache__
# Vscode 的配置文件
.vscode
# Pycharm 等Jet的配置文件
.idea

.gitignore 是以行为单位,一行写一个规则,决定什么不被添加,书写规则也很简单:

  • 若规则不包含 /,会对 .gitignore 同路径下的文件和文件夹进行屏蔽;
  • 若规则以 / 结束,则只匹配在该文件夹路径下的内容;
  • 若规则以 / 开始,则会从项目根目录开始匹配;
  • ! 开头的模式标识否定,该文件将会再次被包含,通常用于在屏蔽的文件中添加特例
  • 支持 * ? [] 在内的通配符。
  • 不能识别中文,因为默认编码是 GBK。

创建一个 .gitignore 文件最便捷的方法是,在创建仓库时勾选 GitHub 自动创建,并在选项中选择合适的 .gitignore 文件模板,再克隆到本地。当然,也可以选择手动创建,再到网上搜索配置模板。

在实际工程中,用 GitHub 创建仓库还可以便捷地添加合适的 LICENSE 文件。

远程服务器拒绝

如果你是在一个大合作团队中工作,很可能是 main 被锁定了(只有 Collaborators 有权限推送),其他人需要 Pull Request 流程来合并修改。

如果你直接提交到本地 main,然后试图推送修改,你将会收到这样类似的信息:

! [远程服务器拒绝] main -> main (TF402455: 不允许推送(push)这个分支; 你必须使用pull request来更新这个分支.)

这里推荐一个做法:Fork 最新的仓库,此时你将拥有这个远程仓库的从分支——你的用户名就是从分支名。再将你的修改提交到这条分支,最后通过 GitHub 网站来提交一个 PR,请求主分支拉取并合并你的从分支。

当然,如果只是几个人的小开发团队,还是建议在仓库的 Settings 界面找到 Collaborators,直接添加队友来得方便。

高端的 Git

高端的操作往往意味着危险的操作,以下将介绍前文未提及的一些操作,同时也挖下一些坑以后来填。

版本回退 (Reset)

有时候你可能希望放弃 Git 仓库中的一部分提交,退到其他某处,这种情况下可以:

$ git reset <Commit ID or Branch>         # 让 Git 仓库回退到某个记录或分支位置
$ git reset <Commit Id or Branch> --hard  # 让所有区回退到某个记录或分支位置(将丢失你工作区和暂存区的数据)

这种情况下可以带着分支一起回退,然后重新 commit,走一条完全不同的道路,而放弃了部分数据。

但是,如果你 reset 完后又后悔了,该怎么办?没关系,只要你没玩 gc 这样的危险指令,那么你 Git 仓库中的数据总有机会找回来。

$ git reflog # 查看最近一些变动快照的操作与版本号

在看到后面的快照的版本号后,则可以 reset 回去。

Cherry-Pick

一个相对高端的分支管理命令,将一些提交复制到当前所在的位置(HEAD)下面,这些提交可以来自其他分支,但不一定是顺序的!

$ git cherry-pick <Commit ID>

Stash

用于将目前暂存区的东西移入一片额外空间,从而清空暂存区。

获取帮助

无论是本博客,还是网上的文档,甚至官方的教程,都未必能把每个指令的每个参数、用法提到,因此 Git 自带的帮助文档就很重要:

$ git add --help
$ git help add
# 以上两个指令的效果等价,都会
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容