『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
# 以上两个指令的效果等价,都会
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容