Git
Git 学习
Windows 初始化操作、基础操作
- 新建文件夹
- 进入文件夹,右击git bash here
1 | $ git init |
基本配置
1 | $ git config --global user.name 'username' # 设置用户名 |
基本操作
1 | # 提交操作 |
1 | # 远程仓库 |
1 | # 分支操作 |
1 | # 推拉操作 |
1 | # 其他操作 |
菜鸟教程 - Git 基本操作:https://www.runoob.com/git/git-basic-operations.html
撤销
- 大写的
HEAD
表示最近的一次commit HEAD~1
中的~1
表示之前一个,退回两个就~2
,如此类推
撤销 git add
操作
从暂存区移出
1
2
3git reset <changed_file>
或
git restore --stage <changed_file>该操作较为安全,只会把文件从
暂存区
移出,不会对硬盘上的源文件进行修改还原磁盘上的文件
1
git checkout HEAD <changed_file>
这个操作会丢失硬盘上的修改,需要注意!
撤销 git commit
操作
撤销
local git
里的commit
1
git reset --soft HEAD~1
硬盘里的文件不会变,文件的变化也会保留在暂存区里,只是这个
commit
被干掉了同时撤销
git commit
和git add
1
2
3git reset HEAD~1
等价于
git reset --mixed HEAD~1只保留硬盘里的文件,暂存区里的
add
,和 local git 里的commit
被干掉了撤销文件的所有修改
1
git reset --hard HEAD~1
硬盘里的文件,暂存区里的
add
,和 local git 里的commit
都被干掉文件完整恢复到初始的状态
虽然这个操作本身可以撤销,但直观上看文件就是被恢复到原来的状态的,需要找回甚是麻烦,使用时要颇为小心!
通过 git revert
进行撤销
与 git reset
删除前一个 commit
不同的是,git revert
本质是增加一个 commit
这个新的 commit
的内容,是你之前 commit
的 -commit
Init
—> +Change
—> -Change
—> Init
1 | git revert HEAD |
也就是把前一个 commit
加
的内容变成 **减
**,减
的内容变成 加
再 commit 放回到 git 里
reset
和 revert
的对比
- reset 只能回到之前某一个commit的状态,但revert可以撤销中间任意一个commit
Init
—> +Change1
—> +Change2
—> -Change1
—> Change2
在使用了
git push
之后,特别是在 公有分支 时,不能通过reset
来删除分支中的commit,只能添加自己合进去的commit
的-commit
来撤销自己的操作
如果是 个人分支
,可以使用 git reset
来撤销
1 | git reset --hard HEAD~1 |
工作流
merge
merge有两种合并,一种是快进合并,另一种是三路合并
快速合并
当前工作分支到合并目标分支之间的提交历史是线性路径时,可以进行快进合并。
三路合并
merge是先寻找两个分支最近的公共祖先 merge base
,然后将该祖先与当前分支以及要合并的分支的差异应用到当前分支上
rebase
相当于把自己当前的commit先延后,先把其他的合在前面,然后再提交自己的commit
与直接merge不同
main 分支
1 | # feature分支: |
可能触发rebase conflict
主分支:squash and merge
squash 把这个分支上的所有改变,合并成一个改变,然后把这个改变 merge 进去
1 | stateDiagram |
1 | graph TB |
Github
1 | # github.con |