git commit
提交->快照
父节点(继承)
git branch
分支->指向
git branch:新分支名
git checkout -b:新分支名(新建+切换分支)
git checkout 分支名/git switch 分支名
分支与合并
git merge 分支名:将分支名指向的节点和head指向的节点合并,合并两个父节点产生一个新的提交记录
git rebase 分支名:将需要被重建的节点以及他的后代节点依次和重建的父节点(分支名)合并,从当前分支和分支名代表的分支开始分开的位置开始
相对引用
使用^向上移动1个提交记录
使用~<num>向上移动多个记录
git branch -f 分支名 要移动到的分支:将分支移动到指定的位置
撤销变更
git reset 分支名:将分支移动回退几个记录
git revert 分支名:将当前HEAD处来自分支名处的更改撤销,产生一个新的提交
整理提交记录
git cherry-pick 提交号:将提交号处的提交作为新增,产生一个新的提交
git rebase -i 分支名:调整从HEAD处到分支名位置的节点(顺序、删除、合并)
git commit
提交->快照
父节点(继承)
git commit --amend:修改最后一次提交
git branch
分支->指向
使用1个^表示前1个提交记录
使用^2表示合并提交记录的第二个父结点
使用~<num>表示前多个提交记录(1可以省略)
git branch 新分支名:新建分支
git checkout -b 新分支名:新建+切换分支
移动HEAD指向
git checkout 分支名/提交号
git switch 分支名/提交号
移动分支指向
git branch -f 分支名 要移动到的分支名/提交号:将分支移动到指定的位置(若HEAD位于移动的分支上,HEAD会随着一起移动)
移动HEAD+分支指向
git reset 分支名/提交号:将分支移动回退几个记录
产生新的提交
git merge 分支名/提交号:将分支名指向的节点和head指向的节点合并,合并两个父节点产生一个新的提交记录
git rebase 分支名/提交号:将需要被重建的节点以及他的后代节点依次和重建的父节点(分支名)合并,从当前分支和分支名代表的分支开始分开的位置开始
git revert 分支名/提交号:将当前HEAD处来自分支名处的更改撤销,产生一个新的提交
git cherry-pick 分支名/提交号:将提交号处的提交作为新增,产生一个新的提交
git rebase -i 分支名:调整从HEAD处到分支名位置(开始分叉的位置)的节点(顺序、删除、合并)
Git tag
git tag 标签名 提交号(提交号不写代表HEAD)
git describe 提交号(提交号不写代表HEAD)
git clone
远程分支反映了远程仓库(在你上次和它通信时)的状态
远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态,不能在远程分支上做提交
远程分支可以像本地分支一样被用来合并
git fetch remote place/git fetch remote source:destination
做了什么:
- 从远程仓库下载本地仓库中缺失的提交记录
- 更新本地仓库中的远程分支指针
- 后一条只能在未检出的分支上进行
- 没有source,则创建分支
git pull remote place/git pull remote source:destination
:
- 相当于将git fetch和git merge两条指令合在一起
git push remote place/git push remote source:destination
:
- 将你的变更(没有指针指向的叶子节点将不会上传)上传到指定的远程仓库,并在远程仓库上合并你的新提交记录
git push
不带任何参数时的行为与 Git 的一个名为push.default
的配置有关。它的默认值取决于你正使用的 Git 的版本- 将分支推送到远程仓库前需要确保做出的改动是基于远程仓库该分支的最新版本(fetch+rebase(git pull --rebase)/fetch+merge(git pull))
- 没有source,则删除远程仓库对应的分支
- 上传本地的提交记录到远程仓库
- 更新远程仓库中的远程分支指针
- 更新本地仓库中的远程分支指针
在远程分支上检出分支使得它们关联
git checkout -b totallyNotMain o/main
git branch -u o/main foo