GIT学习笔记01-基本操作
学习网站:https://learngitbranching.js.org/
2021年1月23日
状态查看
- 命令:git status
- 作用:查看工作区、暂存区状态,是否有对文件进行修改。
- 参数:
- -s 获得简短的输出效果。
添加
- 命令:git add [file name]
- 作用:将工作区的“新建/修改”添加到暂存区。
提交
命令:git commit -m "随便写一些版本信息"
-
作用:将暂存区的改动提交到本地库。
-
讲解:
Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!
Git 希望提交记录尽可能地轻量,因此在你每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。
Git 还保存了提交的历史记录。这也是为什么大多数提交记录的上面都有父节点的原因 —— 我们会在图示中用箭头来表示这种关系。对于项目组的成员来说,维护提交历史对大家都有好处。
查看历史记录
-
命令:git log 查看历史提交记录。
- git log --pretty=oneline
- git log --oneline 简洁版本
- git reflog
版本前进后退
-
命令:git reset
-
基于索引值操作:
git reset --hard [局部索引值]
git reset --hard xxxxxx
-
使用^符号:只能后退
- git reset --hard HEAD^
-
使用~符号:只能后退
- git reset --hard HEAD~n
- 后退n步
-
git revert
虽然在你的本地分支中使用
git reset
很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!为了撤销更改并分享给别人,我们需要使用
git revert
。
-
作用:用于版本的前进后退,也可以用于文件找回。
-
参数:
- --soft 仅在本地库移动HEAD指针。
- --hard 移动本地库指针,重置暂存区、工作区。
- --mixed 移动本地库指针,重置暂存区。
-
讲解:
我们首先看一下 “HEAD”。 HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。
比较文件差异
- 操作:
- git diff [文件名]
- git diff [分支1] [分支2]
- git diff xxxxxx xxxxxx
- 作用:用来比较修改之后还没有放到暂存区的文件的变化内容。
分支
-
操作:
- git branch [分支名] 创建分支。
- git checkout [分支名] 切换分支。
- git merge [分支名] 将所给分支合并到当前分支。
- git rebase [分支名] 将当前分支移植到所给分支的末尾。
-
讲解:
Git 的分支也非常轻量。它们只是简单地指向某个提交纪录 —— 仅此而已。所以许多 Git 爱好者传颂:
早建分支!多用分支!
这是因为即使创建再多的分支也不会造成储存或内存上的开销,并且按逻辑分解工作到不同的分支要比维护那些特别臃肿的分支简单多了。
在将分支和提交记录结合起来后,我们会看到两者如何协作。现在只要记住使用分支其实就相当于在说:“我想基于这个提交以及它所有的父提交进行新的工作。”
GIT远程操作
- git pull [远程主机名] ([分支名]) 从远程库获取分支并与本地分支整合。
- git fetch [远程主机名] ([分支名]) 从另一个存储库下载对象并引用。
- git clone [版本库网址] 将远程库克隆到新目录中。
- git push [远程主机名] [本地分支名] [远程分支名] 将本地分支的更新推送到远程主机。
- git remote add [命名] [远程主机名] 添加远程版本库。
补充
-
整理提交记录
-
git cherrypick
到现在我们已经学习了 Git 的基础知识 —— 提交、分支以及在提交树上移动。 这些概念涵盖了 Git 90% 的功能,同样也足够满足开发者的日常需求
然而, 剩余的 10% 在处理复杂的工作流时(或者当你陷入困惑时)可能就显得尤为重要了。接下来要讨论的这个话题是“整理提交记录” —— 开发人员有时会说“我想要把这个提交放到这里, 那个提交放到刚才那个提交的后面”, 而接下来就讲的就是它的实现方式,非常清晰、灵活,还很生动。
看起来挺复杂, 其实是个很简单的概念。
本系列的第一个命令是
git cherry-pick
, 命令形式为:git cherry-pick <提交号>...
如果你想将一些提交复制到当前所在的位置(
HEAD
)下面的话, Cherry-pick 是最直接的方式了。我个人非常喜欢cherry-pick
,因为它特别简单。
-
-
交互式的rebase
- git rebase -i或--interactive [版本]