git commit 在当前节点上新增一个提交节点,当前节点称为父节点
git分支 - 分支是指指向某一个提交记录 git branch {分支名称} 从当前分支新建一个分支 git checkout {目标分支名称} 从当前分支切换到目标分支 git checkout {目标分支名称}; git commit 从当前分支切换到目标分支并提交变更 git checkout -b {新分支名称} 从当前分支新建一个分支并切换过去
git合并分支 git merge merge - 将两个分支作为父节点,合并时产生一个特殊的提交记录,该提交记录包含两个父节点的内容
git merge {待合并的分支名称} 执行此命令需在主分支上,将子分支(即待合并分支)合并到当前分支
git rebase
rebase - 实际上是取出待合并分支的的提交记录,并复制到当前分支来。优势是合并后的历史更为线性
git rebase {待合并的分支名称} 执行此命令需要在子分支上,将子分支内容复制到主分支上
git 提交移动 HEAD - 指向当前分支上最近的一次提交,通常情况下是指向分支名的
git checkout {提交的hash} 将HEAD指向某一个提交
相对引用
git checkout {分支名称}^ 将HEAD指向分支的上一个提交,可重复指向
git checkout {分支名称}~{num} 将HEAD指向分支上num个提交
强制修改分支位置
git branch -f {分支名称} HEAD~{num} 将分支修改到上num个提交
git branch -f {分支名称} {提交的hash} 将分支修改到指定hash提交
git 撤销变更 git reset HEAD~{num}将分支记录进行回退,回退后本地不存在此提交(变更仍存在,处于未加入暂存区状态) git revert HEAD 撤销变更,实际上添加了一个新的提交,此提交包含撤销某个提交的内容
git 整理提交记录 复制指定提交 git cherry-pick {hash..(空格分割hash,按输入的顺序逐个复制)} 在当前分支执行,将指定hash的提交复制到当前分支
交互式rebse
git rebase -i HEAD~{num} 从当前分支取num个提交进行交互式整理
git rebase -i {分支名称} 从当前提交到指定分支名称进行交互式整理
git rebase {源分支} {目标分支} 将源分支的提交复制到目标分支,如果源分支在目标分支的提交上,则将两者都指向目标分支的HEAD
git tag tag永久标识某个提交 git tag {tag名称} {提交hash} 为某个提交指定一个tag git checkout {tag名称} 可以切换到指定的tag提交
git describe git describe 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)。
它输出的结果是这样的:
<tag>_<numCommits>_g<hash>
tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录,
hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。
当 ref 提交记录上有某个标签时,则只输出标签名称
HEAD操作 ~ 向上移动一个提交 ~{num} 向上移动num个提交 ^2 回到第二个父节点
示例:git branch bugWork main~^2~ 从main分支向上一个提交,再选择第二个父节点,再向上一个提交,创建一个名为bugWork的分支
branch及checkout均可用
git fetch 获取远程仓库的更新 无参数情况下获取所有分支更新 git fetch orign {远程提交hash或远程分支}:{本地分支名}
git pull 获取远程仓库的更新并执行merge操作 git pull origin {远程分支名或远程hash}:{本地分支名} 若本地分支不存在则创建,若当前处在其他分支则将更新拉取到本地新分支后合并当前分支内容
git远程分支 签出远程分支 git checkout -b {本地分支名} {远程分支名} 跟踪远程分支 git branch -u {远程分支名} {本地分支名} git branch -u {远程分支名} // 省略本地分支名时为当前分支
git push git push origin {分支名称} 推送指定分支到远程仓库 git push 与上个命令相同,省略分支名称即为当前分支,如当前分支没有跟踪远程分支则推送失败 git push origin {源提交hash或源分支}:{远程分支名} 如果源提交hash为空,则视为删除远程分支