git操作总结

232 阅读3分钟

1.使用者设定

$ git config --global user.name 'name'
$ git config --global user.email 'email'

这里使用了‘--global’,说明是一个全局的设定。当我们需要在特定的项目里设置不同的使用者时,可以在项目目录下使用以下的命令

$ git config --local user.name 'name'
$ git config --local user.email 'email'

2.设定缩写

$ git config --glocal alias.co checkout

此时,在终端输入'git co'就可以得到和'git checkout'一样的效果了

3.第一次使用 git

$ cd /demo  #切换至项目目录
$ git init  #初始化这个目录,如果目录不存在则使用 mkdir 命令新建一个目录

4.查看状态

$ git status

5.提交到暂存区

$ git add index.html #index.html 是你要提交的文件

使用 vscode 可以直接点击这个➕

多个文件需要提交到暂存区的时候可以使用一下的命令

$ git add --all   #git 版本为 1.x
$ git add .       #git 版本为 2.x

提示:每次修改后记得 add 一下,否则编辑的内容不会被加到暂存区,暂存区只会保留修改前的资料。而且在执行以上命令的时候要注意处在哪个目录下哦

6. 将暂存区的内容提交到仓库存档

$ git commit -m 'first commit'  #'first commit'里面可以写修改信息,方便其他人明白这次 commit 做了什么事

使用 vscode 可以直接点击这个√

提示:commit 操作只会把暂存区的内容提交到仓库,没有添加到暂存区的内容不会被提交

所以 以上操作的流程是这样的👇
将代码从工作目录提交到暂存区(git add),将暂存区的代码提交到仓库(git commit)

7.查看记录

$ git log

当然,用 SourceTree 看记录会舒服很多。 使用参数可以快速搜索到需要的关键词。
参数列表可使用 git log --help查看 使用git log index.html可以查看特定档案的 commit 记录

8.删除档案和修改档案名称

删除档案方法一:

$ rm index.html
$ git add index.html
$ git commit -m 'delete index.html'

删除档案方法二:

$ git rm index.html
$ git commit -m 'delete index.html'

修改档案名称方法一:

$ mv index.html in.html
$ git commit -m 'rename index.html'

修改档案名称方法二:

$ git mv index.html in.html
$ git commit -m 'rename index.html'

不管使用哪种方法,实质上的步骤都是一样的,删除后需要添加到暂存区,再提交到仓库,因为删除也是修改的一种,同理,修改文档名称也是一样的。

9.特定文档不需要上传 git 的操作

$ touch .gitignore #文档如果存在可以忽略这一步

然后编辑这个文档的内容

# 忽略 secret.yml 文档
secret.yml

只要这个文档存在,即使没被 commit 或者 push 到 git 上去,也会产生效果,但是文档设定的规则只对在规则设定之后的文档有效

清楚规则可以使用git clean -fX

10.查看指定代码的作者

$ git blame index.html

这个命令可以查看index.html 的每一行代码是谁在什么时候写的
(所以别人一看就知道这么蠢的代码是我写的了!!)

11.拯救误删的文档

$ git checkout index.html

记住这个命令!!人总会有不清醒的时候!!

12.重做 commit 和修复 commit

git reset指令可以拆掉 commit 重做,搭配这三个商检的参数使用效果更好哦👇

mixed 模式
默认参数。这个模式会把暂存区的档案丢掉,但不会动到工作目录的档案,也就是说 commit 拆出来的档案会留在工作档案,但不会留在暂存区

soft 模式
这个模式下,工作目录和暂存区的档案都不会被丢掉,commit 拆出来的档案会直接放在暂存区。

hard 模式
这个模式下,工作目录和暂存区的档案都会丢掉

同样,使用这个命令+commit 的 SHA-1 就可以前进到想要去的 commit,可以使用这个方法来修复 commit 哦
如果你不记得 SHA-1 是什么,可以使用git reflog查看

在 vscode 上的操作

13.合并分支

假设,我在分支 cat 上新增了两个文档 index.html 和 in.html,我想要 master 分支来合并,我们首先要切回 master 分支,然后执行以下命令

$ git merge cat

提问:A合并 B 和 B 合并 A 有什么不同 其实区别不太大,不管谁合并谁,这两个分支的文档最后都是会拿到的,只是 commit 的信息顺序不一样。

重要概念!
分支只是一个指向某个 Commit 的指标


事实上,我们还可以使用 rebase 命令进行分支的合并
当然,使用 rebase 合并的时候过程和 merge 不太一样

从以上这张图可以看出,第一次 commit 的时候,先将 c68537 拿出来,重新计算一次 SHA-1 并放到 053fb2 上,然后重复这一个步骤把 b174a5 也放到 dog 分支上,最后,原本指向 b174a5 的 cat,改为指向 28a76d,而 head 则不会改变,依旧是指向 cat 分支的。

14.在过去的某个 commit 再开一个新的分支的操作

假设,我们要在 commit(657fce7)上再开一个新的分支,那么首先,我们要回到这个分支

git checkout 657fce7

回去之后$ git checkout -b bird这样你就开到了一个 bird 分支啦。
如果觉得麻烦的话其实可以$ git checkout bird 657fce7
当然!使用 sourcetree 是最方便的了,直接在想开分支的 commit 上右键 branch 一个就好啦(好爱 sourcetree 哈哈哈哈哈哈)

15.操作 commit 信息或者历史记录

此时此刻rebase命令就很好用了,使用$ git rebase -i bb0c9c2就可以进入到 rebase 的互动模式啦,可以尽情的修改或者合并啦

需要注意的是,在互动模式的记录由上而下是从最旧到最新,和git log指令所呈现的结果是相反的哦

16.Reset、Revert、Rebase 有什么区别

Revert 指令是"再做一个新的 Commit 来取消你不要的 Commit",所以执行该命令后 commit 数量会增加。那么如何取消呢,只要在开一个新的 revert 就可以取消啦。

如果觉得 commit 数量变多会很麻烦,可以使用Reset指令直接砍掉上面的 Revert 哦

三者的区别:

指令 改变历史记录 说明
Reset 把目前的状态设定成某个指定的 commit 状态,通常适用于尚未推出去的 commit
Rebase 不管是新增、修改、删除 Commit 都相当方便,用来整理、编辑还没有推出去的 commit相当方便,但通常也只适用于尚未推出去的 Commit
Revert 新增一个 Commit 来反转另一个 Commit 的内容,原本的 Commit 依旧还是会保留在历史记录中。虽然会因此增加 commit 数,但通常比较适用于已经推出去的 Commit,或是不允许适用 Reset 或 Rebase 修改历史记录的指令的场合

17.标签

标签有两种:

$ git tag big_cats 51d54ff #一种是轻量标签 
$ git tag big_cats 51d54ff -a -m 'Big Cats are commint' #一种是有附注标签。

提示:commit 的时候,分支会跟着走,而标签会留在原地哦

18.暫存

当我们代码写了一半要去做别的任务时怎么办?最直接的办法就是先把写好的部分 commit 一下,等有空了再 reset 一下,把做了一半的东西拆回来继续做。
另外,也可以选择更好的方法,就是 stash指令

$ git stash #暂存正在修改的几个文档
$ git stash list #查看 stash 列表
$ git stash pop stash@{2} #把做了一半的文档找回来继续做

注意!Untracked 状态的文档预设没办法被 stash,需要额外使用-u参数

19.GitHub的使用

push指令可以将本地的代码 push 到仓库中去。
fetch指令可以将线上有但本地没有的内容抓取下来,同时移动 morigin 相关的分支,执行该指令后需要merge一下。
pull 指令相当于 fetch + merge ,也就是把线上的东西抓取下来,并且更新本息的进度。

20.如何跟上当初 fork 的项目的进度

第一种方法:删掉 fork 重新再来(这方法虽然蠢但是好用啊!) 第二种方法:设定原作的远程端点,抓取原仓库的内容,推回到自己的仓库中


整理的时候发现 sourcetree 真好~操作简单啊!

大概就总结这么多吧,在未来开发中遇到什么新的问题再继续更新~

总结自:为你自己学 git