Skip to main content

版本控制——Git 的基本使用

Contributor: @XieJiSS

Git作为最基础的版本控制工具,是团队合作的基础。学习路线比较陡峭,但是也正因如此,网上有着非常详细的教程,基本上你遇到的所有问题都可以直接搜到解决方案。

错误的**Git**操作可能产生不良后果,在真实生产环境下请谨慎操作。

要求:

  • 请至少要看完 Beginning 和 Intermediate,这也是日常协作中最常用到的部分。
  • 可以根据自身情况看一些 Advanced 的内容。
  • 练习非常重要,建议自己创建 GitHub repo 或 bitbucket repo,跟着教程内容操作并记笔记。在 DDL 后,mentor 会查看笔记内容。
  • 注意:如果不清楚怎么配置 ssh key,建议在学习 Setting up a repository 前,先学习 Intermediate 中的 Git SSH 章节。

https://www.atlassian.com/git

Beginning

What is Git 只需要阅读 Version control with Git 小节

Install Git

  • 注意:文章最开始有目录,可以点击直接跳转

Setting up a repository

Saving changes(可暂时跳过 git stash 部分)

Syncing(仅 git pull 和 git push 部分)

Intermediate

Git SSH

  • 对于 SSH,我们建议使用 ed25519 的 key:
ssh-keygen -t ed25519
  • 请注意保护你的私钥。公钥(.pub 结尾的文件)可以发给别人或上传到 GitHub Settings 中,私钥(无后缀名)永远不要放到网络上。

Inspecting a repository 重点:会看 git status 和 git log

Undoing changes 跳过 git clean 部分

Making a Pull Request

  • 只看 Feature Branch Workflow With Pull Requests 和 Forking Workflow With Pull Requests
  • 后面有个 Example,不过那个是 Forking Workflow 的,实验室内部一般用 Feature Branch Workflow

Using Branches 跳过 Creating remote branches 部分

Advanced

Syncing(全部)

Rewriting history

Merging vs. Rebasing

  • 只看 Interactive Rebasing 和 Force-Push 两节

Reset, Checkout, and Revert 注意:本章中存在小错误,有的地方两条命令被写在了同一行

Git Hooks 了解 pre-commit hook 即可

Git cherry pick

Git-show 直接看 Examples of git-show 小节

Genius

ZenithalHourlyRate/learn-git-the-not-so-super-hard-way 复行数十步,豁然开朗

Zenithal 是 thu 姚班学长

补充阅读

另一份教程 - 分支管理 可以着重看一下「解决冲突」一节

UPDATE: git 配置:工作生活两不误的 includeIf 语法

思考题:corner case (不需要提交)

  • [easy] 如何合并多个commit至一个?会有什么副作用?
  • [easy] git reset --hard --soft --mixed 有什么区别?一般用哪个?
  • [easy] git reset --hard [sha of some earlier commit] 后,git log中最新几个commit消失。此时如何回到之前的最先commit?你觉得git log和git reflog有何区别?
  • [advanced] 目前有三个连续的commit ABC,希望将C关于B的修改应用于A上并新建分支。如何做到?
  • 什么 three-way-merge
  • 关于git,你有哪些思考,总结出了哪些best practice?