重学Git(一)
一、最最最基础操作
# 初始化仓库
git init
# 添加文件到暂存区
git add readme.md
# 提交
git commit -m 'wrote a readme file'
二、简单的时空穿梭
1. 文件修改后,查看状态
修改 readme.md 文件,查看状态

git status 命令告知,已经对文件修改但仍未提交暂存区,下一步运用 git diff readme.md 对文件状态进行比较,比较结果显示新的文件比旧的文件新增两行

git add readme.md 后,提示文件已提交暂存区,下一步需要 commit

提交后再次查看 status

2. 查看过去
再次修改并提交,用 git log 命令查看版本

对于 git log 命令,可以添加参数从而更加清晰展示
如 git log --oneline --graph

此外也可以在 git gui 中更加清晰查看版本变动

3. 回到过去
git 中,运用 Head 代表当前版本,用 Head^ 代表上一个版本,用 Head^^ 代表上上个版本,如果回退过多,如要回退上一百个版本,则可使用 Head-100

回退版本后查看,发现只剩下了两个版本

此时发现已找不到第三个版本的 commit id,如果此时恰好也没有其他历史记录获取 commit id,可以通过命令 git reflog 获取完整的记录

找到 commit id 后再次回到第三个版本

三、工作区、暂存区与版本库

1. git diff 差异比较
# 1. 比较工作区与暂存区
# 当工作区有改动,暂存区为空,比较工作区与最后一次commit的共同文件
# 当工作区有改动,暂存区不为空,比较工作区与暂存区的共同文件
git diff
# 2. 比较工作区与HEAD
git diff HEAD --filename
# 3. 比较暂存区与HEAD
# 比较的是所有不同文件的增删改
git diff --cached
git diff --staged
# 4. 比较两个不同版本
git diff 211ba2 2948ac2 --filename
2. 撤销工作区的修改
如果需要撤销工作区的修改,将工作区文件还原成暂存区的状态,运用 git checkout -- file 命令,可以还原修改文件到与暂存区相同的状态。

如果不但修改了工作区,并且已进行 add 到暂存区的操作,则可运用 git reset HEAD 将暂存区修改撤销掉

还原后则撤销了该文件的 add,此时可再用 git checkout -- file 命令,还原工作区该文件的更改。
3. 删除文件
# 删除工作区的文件
rm filename
# 删除工作区与暂存区的文件,可以运用-r进行递归删除
git rm filename
# 只将文件存暂存区删除
git rm --cached filename
三、git 分支管理
通过创建新分支,可以在团队开发中在自己的分支中进行开发,而不影响其他的分支,在开发完成后可以将自己的分支一次性合并到原有的分支上,不会影响团队其他人的工作。
1. 分支创建
# 创建并切换分支到“dev”
git checkout -b dev
# 相当于如下两条命令的合并
git branch dev # 创建分支
git checkout dev # 切换分支
# 查看目前所处分支
git branch
# switch命令也可以创建新的分支
git switch -c dev
操作创建 dev 分支,并切换;在 dev 分支对 readme 文件进行操作,新增一行并提交;重新切换回 master 分支,发现 readme 文件并无刚刚更新的内容

运用 git merge 命令,将刚刚在 dev 的更改合并到 master

再次查看 readme 文件,发现更新已合并。
2. 冲突
如果同时对 master 分支和 dev 分支新增一行并提交,在合并时会产生冲突,无法 automerge:
解决冲突详见廖雪峰 git 教程