这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
在本次青训营大项目中,少不了与团队在同一个仓库下共同开发,那么熟练掌握git命令相当重要,下面是我记录的本地git操作
1、git add
将该文件添加到暂存区。
2、git commit -m "message"
将暂存区内容添加到本地仓库中。由于本次项目使用了”husky+commitlint“作为代码提交规范,所以提交信息message需要按照格式来写。
3、git reset
用于回退版本,可以指定退回某一次提交的版本, 它通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”,原来指向的提交记录就跟从来没有提交过一样。
缺点:执行reset命令之后会删除该commitID以后的所有的提交。在公共分支上我们commit了自己的内容,别人也提交了commit,如果使用reset命令将会影响到他人的提交,此时可以考虑使用git revert命令。
4、git revert
git revert 是撤销其中的commitID,然后重新生成一个commitID`, 在commitID`中引入了更改 —— 这些更改刚好是用来撤销 commitID 这个提交的,所以它本身不会对其他的人提交commit产生影响。revert 之后就可以把更改推送到远程仓库与别人分享。
使用 git revert 可以撤销指定的提交, 要撤销一串提交可以用 ..语法。 注意这是一个前开后闭区间,即不包括 commitID1,但包括 commitID2。
git revert 默认会自动提交commit,可以使用参数:-n 或者 --no-commit,不进行自动提交
git revert -n
5、git merge
把合并到当前所在的位置(HEAD)的分支里
在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”
6、git rebase [startpoint] [endpoint]
另一种分支合并方法,将[endpoint]的分支里的工作直接移到 [startpoint]下。
[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间, [startpoint]为变基目标分支)
优势就是可以创造更线性的提交历史,如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。
7、git rebase -i [startpoint] [endpoint]
Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。
8、git cherry-pick
将一些提交复制到当前所在的位置(HEAD)下面的话, Cherry-pick 是最直接的方式了。
它可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题)。
9、git tag
标签永远指向某个提交记录的标识,比如软件发布新的大版本,或者是修正一些重要的 Bug 或是增加了某些新特性,并不会随着新的提交而移动。你也不能切换到某个标签上面进行修改提交,它就像是提交树上的一个锚点,标识了某个特定的位置。
*标签可被删去 git tag -d
10、git describe
能帮你在提交历史中移动了多次以后找到方向;当你用 git bisect(一个查找产生 Bug 的提交记录的指令)找到某个提交记录时,或者是当你坐在你那刚刚度假回来的同事的电脑前时, 可能会用到这个命令。
11、操作符^与~符
它们后面也可以跟一个数字。但是^后面的数字与~后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个父提交。还记得前面提到过的一个合并提交有两个父提交吧,所以遇到这样的节点时该选择哪条路径就不是很清晰了。
Git 默认选择合并提交的“第一个”父提交,在操作符^后跟一个数字可以改变这一默认行为