之前从未系统梳理过git的笔记,今天将自己常用的操作梳理一边。

Git Doc: https://git-scm.com/doc

初始化

初始化本地账户

设备第一次使用git需要初始化

git config --global user.name "name"
git config --global user.email "eamil-address"

最后可以通过 git config -l 来查看已配置好的信息。

设置ssh免密钥

git使用https协议,每次pull, push都会提示要输入密码,使用git协议,然后使用ssh密钥,这样免去每次都输密码的麻烦.

1. 生成密钥对 ssh-keygen -t rsa -C "** **your_email@youremail.com** **"

  1. 将公钥设置到托管平台上 ,设置看具体平台
  2. 验证配置是否成功 ssh -T git@github.com
  3. 把git的 remote url 修改为git协议 .使用 git remote -v 查看远程链接使用的协议,如果是不是git得修改, 命令参考 git remote set-url origin git@github.com:someaccount/someproject.git ; 当然最好初始化仓库的时就使用git协议

初始化仓库

git init   # 本地初始化一个git仓库

# 配置.gitignore

git add . # 将本地所有文件添加到我们本地仓库
git commit -m "first commit"  # 提交
git remote add origin git@github.com:crazy-dking/xxx.git  # 设置远程链接 
git push -u origin master   # 推送代码到远程

git 版本退回

我经常会弄出一些无用的commit, git reset会让我的代码记录看起来舒服一点, 我们可以使用 reset 和 revert

reset 三个模式

它有三个模式:hard soft mixed,下图可以看出他们的威力(作用范围)

gittree

常用

我就记录一下个人常用的方法!

已提交,没有push
1.git reset --soft <版本号> 撤销commit
2. git reset --mixed <版本号> 撤销commit和add两个动作.
已提交,并且push
1. git reset --hard <版本号>撤销并舍弃版本号之后的提交记录。 使用需要谨慎 。这样操作可以导致无法推送,因为本地落后于远程版本,使用 git push -f 强制推送,但是这样会把别人的代码干掉,很容易被辞退,所以最好别用
2.git revert <要删除版本的版本号> 将当前撤销作为一次新提交,之前的提交记录任然存在。个人感觉很少使用。

PS: git reset 版本号写:要会滚到哪里,而 revert是要删除哪一个版本

Git 分支

git branch -a # 查看所有分支
git checkout -b <分支名字> #创建分支并且切换到新分支
git checkout <分支名字> # 切换分支

Git stash 储藏代码

需要说明一点,stash是本地的,不会同步到远程

适用场景

  1. 代码写到一半,需要切换到其他分支,不想提交留下记录。
  2. 写的代码,食之无味弃之可惜。

详细使用

一般使用:

git stash save <massage> # 暂存 , save <massge> 可以不要缺省
git stash list #查看暂存列表,可以有多个暂存。
git stash pop # 回复上一次暂存,这里存储的方式和栈一样,我们就恢复栈顶时的状态,并且当前暂存会被删除
git stash drop <name>#删除指定暂存,name就是 形如 `stash@{1}` 这样的数据
git stash apply <name># 恢复指定中暂存,不会删除

Gitflow

gitflow

https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/git-flow/

https://zhuanlan.zhihu.com/p/198066289

git rebase 压缩commit

为了让自己的代码历史好看一点,我们需要压缩自己的commit。

为了合并合并最近n次提交,进行如下操作

  1. git rebse -i HEAD~{n}
  2. 随后我们会进入vim 操作界面,将冗余的分支前的标记改为 squash (一个 s简写也行),保留一个 标记为 p. wq保存退出
  3. 我们再次进入一个vim 界面,这里修改提交信息,自行修改,保存退出完成

gitrebase

git rebase 删除commit

这里和压缩的操作是一样的,修改前缀为 drop, rebase还有很多黑科技,可以详细详细看看文档

git rebase 合并分支

其实git merge就可以做到合并分支,正常合并分支,我们一般都用git merge命令,这样子会导致git的graph 有交叉 ,而不是一条直线。结合git rebase 合并分支可以让我们的git graph非常简洁,只有一条线。

详细步骤:

dev 主分支,future开发分支

  1. git checkout future # 切换到 future
  2. git rebase dev # 复制commit 信息到 dev
  3. git checkout dev 切换到主分支
  4. git merge future # 合并dev

完成,这样操作下来,流程就非常简洁了。

参考视频:

https://www.bilibili.com/video/BV1Ur4y1q7xB

其他补充

  1. HEAD 最近的一次提交
  2. HEAD~{n} 最近n次的提交
  3. HEAD^{n} 当前分支的n次父级

努力成长的程序员