git 用法
本文最后更新于:2023年1月12日 下午
前言
别人上班,我摸鱼,别人加班,我摸鱼,然后就写出了这篇 Git 的简单使用教程。
摸摸索索一个多月总算是完成了这篇 git 的学习笔记 😂, 还好最后还是坚持了下来,可能有些有问题,欢迎各位大佬指正,可以通过提issue的方式,或者关注我的公众号, 微信搜索 前端入坑手册,在后台给我留言。
准备
- 首先需要生成 ssh 秘钥,
ssh-keygen -t rsa -C "你公司内部邮箱地址"
,如果成功,将会在~/.ssh
文件夹下生成对应的私钥和公钥。ls
- 复制
id_rsa.pub
文件的内容(如果是 GitHub)到setting -> SSH and GPG keys-> New SSH key
并保存
记住放到 GitHub 上的是公钥
全局配置账号
1
2git config --global user.name "xxxx"
git config --global user.email "xxxx"
完成以上步骤后,就可以愉快的 pull 或 push 代码了。和 https 拉取方式不同的是,https 方式需要每次提交前都手动输入用户名和密码,ssh 的方式配置完毕后 Git 都会使用你本地的私钥和远程仓库的公钥进行验证是否是一对秘钥,从而简化了操作流程。
基础篇
初始化一个 git 仓库,使用命令git init
,会在项目下生成一个.git 的文件夹,这就是 Git 的版本库
前情提要:git 有工作区和暂存区之分
工作区:就是我们项目所在的区域
暂存区:git add 操作之后,实际就是将工作区的内容添加到暂存区
git add
将工作区的更改,添加到暂存区
1 |
|
git commit
将暂存区的内容提交到当前分支,也就是本地仓库
1 |
|
git push
将本地分支发布到远端分支
- 常用命令
1 |
|
- 进阶命令
格式:git push origin <source>:<destination>
source
可以是任何 Git 能识别的格式,例如:HEAD~2
,foo^2
1 |
|
git pull
拉取远端更新分支到本地
- 常用命令
1 |
|
- 进阶命令
同样git pull
也可以使用<source>:<destination>
格式
格式:git pull origin <source>:<destination>
source
可以是任何 Git 能识别的格式,例如:HEAD~2
,foo^2
1 |
|
git fetch
将远程主机的最新内容拉取到本地,但不会合并
1 |
|
git merge
将两个或多个分支进行合并,并生成一个新的提交记录,保留合并历史
1 |
|
执行
git pull
命令,实际就是git fetch + git merge
git rebase
是另一个合并分支的命令,其实际上就是取出一系列的提交记录,”复制“它们, 然后在另外一个地方着个的放下去。
合并分支
1
2
3
4
5
6
7
8
9
10# 当前分支topic
# A---B---C topic
# /
# D---E---F---G master
#执行以下任意一条命令
git rebase master
git rebase master topic
# A'--B'--C' topic
# /
# D---E---F---G master
git rebase --abort
:rebase
时,发生冲突,可以用来阻止rebase
git rebase --continue
:rebase
时, 解决了冲突后,用来继续rebase
git rebase -i
: 合并多个commit
记录git pull --rebase = git fetch + git rebase
git checkout
这是一个强大的命令,可以做很多事
创建新的分支
git checkout -b dev
: 基于当前分支创建一个新的dev
分支,并切换到dev
分支git checkout -b dev master
: 基于master
分支创建一个新的dev
分支,并切换到dev
分支等价于
git branch -b dev
git checkout dev
: 切换分支, 切换到dev
分支等价于
git branch dev
git checkout <file>
: (file
可以是个”点”, 表示撤销所有文件的更改)撤销工作区中的指定更改,不包含未被git
监控的文件等价于
git restore <file>
如果需要撤销暂存区的更改,可以使用
git restore --staged <file>
git cherry-pick
如果你只需要某个分支的部分提交代码,就可以考虑使用这条命令
git cherry-pick <commit>
1 |
|
git cherry-pick <branch>
: 命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。git cherry-pick --abort
: 发生代码冲突时,可以阻止合并代码,回到操作前的样子git cherry-pick --continue
: 解决代码冲突后,继续进行cherry-pick
命令git cherry-pick --quite
: 发生代码冲突后,可以阻止合并代码,但是不会回到操作前的样子
其他命令
git branch
用于分支管理的命令
1 |
|
git stash
将本地的更改暂存。
当本地发生更改,但还未commit
, 又要进行其他操作( 如更新远端最新代码 ),如果直接git pull
或git pull --rebase
会报错,这时,就需要我们先将更改暂存。
1 |
|
如果需要暂存还未被
git
跟踪的文件,可以先git add
后再git stash
git reset
版本回退,如果是还未提交到远端仓库,可以直接使用git reset
回退,如果已经提交则需要下面提到的git revert
1 |
|
git revert
版本回退,会创建一个新的commit
记录。
1 |
|
参考
[1] https://juejin.cn/post/6974184935804534815?share_token=e6867a4f-d921-469d-84e2-e4a3e1810d0f
[2] https://learngitbranching.js.org/?locale=zh_CN
[3] https://www.liaoxuefeng.com/wiki/896043488029600)
[4] https://www.cnblogs.com/hujunzheng/p/9732936.html
[5] https://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html