本文最后更新于 2023年7月31日 下午
Learn Git Branching 是个不错的练手教程,可惜长期不用太容易忘了
Learn Git Branching 备忘
Git 基本概念
graph LR
A[工作区] -- git add --> B[暂存区]
subgraph "版本库"
B -- git commit --> C[HEAD]
subgraph "提交树"
C
end
end
变更
提交变更
撤销变更
reset
- 在reset后, C2 所做的变更还在,但是处于未加入暂存区状态
revert
1 2 3
|
git revert [commit_id]
|
- 在 revert 后多了一个表示撤销操作的新提交,这样就可以把更改推送到远程仓库了
本地分支
新建并切换分支
1 2 3 4 5 6 7
| git branch -b [branch_name]
git branch [branch_name] git checkout [branch_name]
|
强制移动分支位置
1 2 3
|
git branch -f [branch_name] [commit_id]
|
删除分支
1
| git branch -d [branch_name]
|
合并分支
merge
1 2 3 4
|
git merge [branch_name]
|
rebase
1 2 3 4
|
git rebase [branch_name]
|
- rebase 使提交树变得很干净, 所有的提交都在一条线上
- merge 则能够保留提交历史
在提交树上移动
查看 HEAD 位置
分离 HEAD
- HEAD 一般指向分支名,分离则使得它指向具体的 commit
1
| git checkout [commit_id]
|
相对引用
1 2 3 4 5 6 7 8
|
git checkout [commit_id]^
git checkout [commit_id]~<num>
|
自由修改提交树
cherry-pick
1 2 3
|
git cherry-pick [commit_id_1] [commit_id_2] ...
|
rebase -i
锚定提交
tag
1
| git tag [tag_name] [commit_id]
|
describe
远程仓库拷贝
1
| git clone [remote-repository-git]
|
远程分支
- 远程分支命名规范:
<remote repository name>/<branch name>
,repository 一般为 origin
- checkout 远程分支时,自动进入分离 HEAD 状态
fetch:从远程仓库获取数据
- 下载提交记录 + 更新远程分支指针
- 不影响本地分支
- 带参数:到远程仓库的
[place]
上,然后获取所有本地不存在的提交,放到本地的 o/[place]
上。
1 2 3 4 5 6 7 8 9
| git fetch [remote] [place]
git fetch [remote] <source>:<destination>
git fetch [remote] :<destination>
|
pull:从远程仓库更新本地仓库
- 下载提交记录 + 更新远程分支指针 + 合并本地分支
1 2 3 4 5 6 7
| git pull
git fetch git merge origin/master
|
向远程仓库提交变更
- 带参数:切到本地仓库中的
[place]
,获取所有的提交,再到远程仓库 [remote]
中找到 [place]
,将远程仓库中没有的提交记录都添加上去
1 2 3 4 5 6 7 8
| git push [remote] [place]
git push [remote] <source>:<destination>
git push [remote] :<destination>
|
远程跟踪
1
| git branch -u [remote_branch] [local_branch]
|