Github提供基于Git的版本托管服务。Git是一款开源的分布式版本控制系统,是Github上用来管理项目的工具。
简洁版
- Learn Git in 15 Minutes(Video)
- Learn Github in 20 Minutes (Video)
- 莫烦git
- Git - 简易指南
- (快速上手)我用四个命令概括了 Git 的所有套路
- Git & GitHub Crash Course For Beginners
对于工具的学习,我认为应该多做减法,只捡最有用的学,那些奇技淫巧不学也罢,应该把时间投入更有价值的事情中。 -labuladong
详细版
Github系列
- 从0开始学习 GitHub 系列之「加入 GitHub」
- 从0开始学习 GitHub 系列之「Git 速成」
- 从0开始学习 GitHub 系列之「Git 进阶」
- 从0开始学习 GitHub 系列之「向GitHub 提交代码」
- 从0开始学习 GitHub 系列之「团队合作利器 Branch」
使用
labuladong 我用四个命令概括了 Git 的所有套路
本地git使用
需求一,如何把 work dir 中的修改加入 stage
git add
需求二,如何把 stage 中的修改还原到 work dir 中
git checkout
把本地文件已经添加到stage中了,然后修改了本地文件,但是后悔了。希望stage中的文件能够覆盖本地文件 (本地新增加的文件仍会被保留)
把 a.txt 添加到stage区,然后在 a.txt 中添加了一行 hello world。现在需要将 stage 中的空文件去覆盖work dir中的文件,用 git checkout a.txt
需求三,将 stage 区的文件添加到 history 区
git commit -m '一些描述'
当一些描述中有错别字时,可以用git commit --amend
。就是把错别字的修改和之前的那个 commit 中的修改合并,作为一个 commit 提交到 history 区
需求四,不改变 work dir 中的任何数据,把stage中的 a.txt 变为 unstage 的状态。
git reset a.txt
不会改变 work dir 中的数据,会改变 stage 区的数据,所以应确保 stage 中被改动数据是可以抛弃的。
需求2中的git checkout是把stage中的文件覆盖到work dir中,因此会改变work dir中的内容。
- 改了本地的代码,发现还没有之前放在stage中的代码好,于是用checkout覆盖
需求四中的git reset a.txt
相当于把a.txt文件从索引状态变为非索引状态,这不会改变work dir中的内容
- 已经把这个文件放到stage中了,但是还需要修改。于是把文件从stage变为unstage状态。除这个文件的其他文件都可以进行后续的commit
需求五,将 work dir 的修改提交到 history 区
git add
然后 git commit
就行了,或者一个快捷方法是使用命令 git commit - -m "一些描述"
需求六,将 history 区的历史提交还原到 work dir 中
git checkout HEAD .
比如从 GitHub 上 clone 了一个项目,然后乱改了一通代码,结果发现我写的代码根本跑不通,于是后悔了,干脆不改了,我想恢复成最初的模样。用git checkout HEAD .
后,work dir 和 stage 中所有的「修改」都会被撤销,恢复成 HEAD 指向的那个 history commit。(注意:新增的文件不会被撤销)
当然,只要找到任意一个 commit 的 HASH 值,checkout 命令可就以将文件恢复成任一个 history commit 中的样子:git checkout 2bdf04a
(HASH值可以用git log –oneline来查看 (或者git reflog))
从stage到work dir的checkout
git checkout a.txt
:不想要work dir中的a.txt内容了,让stage中的内容把work dir中的内容覆盖从stage到work dir的reset
git reset a.txt
:把stage 中的a.txt移动到work dir,然后再git commit . m "my commit"
时,提交到history中的是除了a.txt外的所有文件从 history到workdir的checkout
git checkout HEAD .
:比如我从 GitHub 上 clone 了一个项目,然后乱改了一通代码,结果发现我写的代码根本跑不通,于是后悔了,干脆不改了,我想恢复成最初的模样
需求七,合并多个 commit
git reset 17bd20c
到最开始的记录(而且不会改变work dir中的数据),然后git add
和git commit