git运行原理示意图:
个人总结的常用命令如下:
本地搭建仓库:
- git init
分支的创建
-
git commit :提交一个快照
-
git branch 新分支名 : 提交一个分支
-
git checkout 新分支名 : 切换到新分支
-
git checkout -b 新分支名 : 创建并切换到新分支
-
git merge 分支名: 合并分支名到当前分支
-
git rebase fix: 合并分支名到当前分支(fix分支并不会改变,只是将当前分支转移到fix分支树下方,与merge核心作用相同)
-
cat .git/head 如果指向一个引用,可以用 git symbolic-ref HEAD 查看其指向
-
git log : 查看提交记录的哈希值
分支移动
-
git checkout master~ :向master上方移动一个提交记录;
git checkout master~3:向master上方移动3个提交记录;
git checkout master^ : 移动到master的父节点;
git checkout master^^:移动到master父节点的父节点;
git checkout HEAD^:移动到head的父节点。
-
git branch -f master HEAD~3 : 将 master 分支强制指向 HEAD 的第 3 级父提交。
-f : 强制移动
分支回退
-
git reset HEAD~1 : 回退一个分支(改写历史,对远程分支无效)
git revert HEAD : 建立一个新的分支,新分支与退回后的分支相同
分支拉取
- git checkout feature-1.1.0RELEASE :切换到开发分支
- git pull : 拉取分支(更新本地分支)
- git status :检查本地修改的文件
- git add 上面检出的被需要修改的文件 : 添加需要提交的修改的文件
- git commit -m ‘提交信息’ :提交代码
- git push : 推送到远程仓库
分支高级
- git cherry-pick c2 c4 : 将多个分支合并到当前分支下
- git rebase -i HEAD~4 :在ui界面打开交互,然后按自定义的顺序复制选中分支(从当前分支开始往上的4个分支)
- git rebase main bugFix : 将bugFix分支合并到main分支
- git commit --amend : 提交只存在于本地的时候使用
- git tag v1 c1 : 将c1命名成v1(1.0版本,锚点)
- git describe main : 描述距离main分支当前分支最近的锚点
- git bisect : 查找产生bug的提交
分支链式操作
- git checkout HEAD^22 :
git checkout -b bugWork HEAD~^2~
: 新建并切换,然后移动分支git branch bugWork HEAD~^2~
: 新建并切换,然后移动分支
远程分支
- git clone 地址 : 拉取地址中的远程分支到本地
- git fetch : 下载远程分支最新分支数据到本地分支(分支的历史树下载)
- git pull : 下载远程分支,并与本地分支合并(git fetch + git merge)
- git push: 提交分支到远程分支
- git pull --rebase :下载远程分支,并与本地分支合并(git fetch + git rebase 让分支树看上去更为简洁)
如何关联远程分支
- local branch “main” set to track remote branch “o/main” :git自动配置,将本地分支与远程分支关联
- git checkout -b totallyNotMain o/main : 创建分支totallyNotMain 并关联远程分支o/main
- git branch -u o/main foo : 将foo分支关联远程分支o/main
- git branch -u o/main : 将当前分支分支关联远程分支o/main
- git push origin foo : 将本地foo分支push到远程分支的foo分支(对foo分支做push?)
- `git push origin foo^:main : 将本地分支的上一个分支push到远程分支的main分支
- git fetch origin foo : 将远程分支poo 下载到本地的o/foo分支下
- git fetch origin foo~1:bar : 将远程分支poo的上一个分支 下载到本地的bar分支下
- git push origin :side :删除远程分支side(push空到远程分支就会删除)
- git fetch origin :bugFix :在本地新建一个分支bugFix
- git pull origin … :相当于以上命令加一个merge或者rebase
- git pull origin develop :将远程分支develop pull到本地当前分支
git本地配置信息
- 修改全局用户名
git config --global user.name
- 修改全局邮箱
git config --global user.email
- 修改当前项目用户名
git config user.name
- 修改当前项目邮箱
git config user.email
- 查看系统config
git config --system --list
- 查看当前用户(global)配置
git config --global --list
- 查看当前仓库配置信息
git config --local --list
git进阶
- git commit --no-verify -m “信息” :绕过检查直接提交
- git push --set-upstream origin dev :在远程创建dev分支,并将本地dev分支push上去
- git branch -D localBranchName :删除本地分支
- git push origin --delete remoteBranchName :删除远程分支
- git checkout . 取消所有修改
本地分支回退
- git log 查看日志(得到hash值)
- git reset --hard hash值(硬回退。回退到hash值的提交位置,清空所有修改)
- git reset --soft hash值 (软回退,回退到hash值的提交位置,保留之前所有变更,可以重新add,commit)
在非目标分支进行的改动,如何移到目录分支?
利用入栈和出栈操作,
将改动进行入栈操作,然后在指定分支进行出栈即可
参考文档: https://blog.youkuaiyun.com/qq_38530648/article/details/115166520
待续…
如果重置忽略文件
//1. 重置所有缓存
git rm -r --cached .
//2. 重新添加
git add .
//3. 提交
git commit -m ".gitignore is now working"
忽略某个具体缓存
git rm --cached .idea/misc.xml
git commit -m "untrack .idea/misc.xml"
目录被识别成了文件怎么解决
删除被错误识别目录下的git文件夹
git沙漠模拟:https://oschina.gitee.io/learn-git-branching/?demo