之前从未系统梳理过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** **"
- 将公钥设置到托管平台上 ,设置看具体平台
- 验证配置是否成功
ssh -T git@github.com
- 把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,下图可以看出他们的威力(作用范围)
常用
我就记录一下个人常用的方法!
已提交,没有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是本地的,不会同步到远程
适用场景
- 代码写到一半,需要切换到其他分支,不想提交留下记录。
- 写的代码,食之无味弃之可惜。
详细使用
一般使用:
git stash save <massage> # 暂存 , save <massge> 可以不要缺省
git stash list #查看暂存列表,可以有多个暂存。
git stash pop # 回复上一次暂存,这里存储的方式和栈一样,我们就恢复栈顶时的状态,并且当前暂存会被删除
git stash drop <name>#删除指定暂存,name就是 形如 `stash@{1}` 这样的数据
git stash apply <name># 恢复指定中暂存,不会删除
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次提交,进行如下操作
git rebse -i HEAD~{n}
- 随后我们会进入vim 操作界面,将冗余的分支前的标记改为
squash
(一个s
简写也行),保留一个 标记为 p. wq保存退出 - 我们再次进入一个vim 界面,这里修改提交信息,自行修改,保存退出完成
git rebase 删除commit
这里和压缩的操作是一样的,修改前缀为 drop, rebase还有很多黑科技,可以详细详细看看文档
git rebase 合并分支
其实git merge就可以做到合并分支,正常合并分支,我们一般都用git merge命令,这样子会导致git的graph 有交叉 ,而不是一条直线。结合git rebase 合并分支可以让我们的git graph非常简洁,只有一条线。
详细步骤:
dev 主分支,future开发分支
- git checkout future # 切换到 future
- git rebase dev # 复制commit 信息到 dev
- git checkout dev 切换到主分支
- git merge future # 合并dev
完成,这样操作下来,流程就非常简洁了。
参考视频:
https://www.bilibili.com/video/BV1Ur4y1q7xB
其他补充
HEAD
最近的一次提交HEAD~{n}
最近n次的提交HEAD^{n}
当前分支的n次父级