git reflog【查看记录】
可以查看所有的操作记录
commit_id,包括使用git reset —hard回退版本的记录索引; 可以使用git reset --hard commit_id版本回退恢复git reset及git rebase误操作问题。
git diff【文件差异】
工作目录:已跟踪的文件目录
暂存区:
git add -a命令后修改文件保存的存储区如果命令后面没有指定相应的目录或文件名
filename,则会比较所有文件之间的差异,如果是目录则比较整个目录文件之间的差异,是文件的话只比价对应文件之间的差异
工作目录 vs 暂存区
git diff <filename>
说明
- 如果暂存区有添加文件,则比较
工作目录与暂存区中的差异- 如果暂存区没有添加文件,则比较
工作目录与最新commit之间的差异
暂存区 vs git 仓库
git diff --cached <commit> <filename>
说明
比较
暂存区与 仓库commit之间的差异,没有指定commit则与最近一次commit提及内容进行比较
工作目录 vs git 仓库
git diff <commit> <filename>
说明
比较
工作目录与 仓库commit之间的差异,没有指定commit则与最近一次commit提及内容进行比较
git 仓库 vs git 仓库
git diff <commit1> <commit2>
说明
比较仓库
commit1与commit2之间的差异,没有指定commit则与最近一次commit提及内容进行比较, 可以为不同分支commit之间比较
git stash【暂存操作】
暂时保存没有提交的内容到
git栈中; 类似于一个中间存储空间,运行该命令后,所有没有commit的代码,都会从工作区移入git栈中进行存储,之后我们可以进行其他git pull、git checkout等命令操作
没有添加
stash@{id}存储记录索引 id ,默认是对stash@{0}操作,即栈顶存储的记录
git stash <option> <stash@{id}>
-- option:
list 列出所有暂时保存在 git 栈中的 stash@{id} 记录
clear 清空 git 栈中的内容
drop 删除 git 栈中 stash@{id} 内容
apply 恢复 stash@{id} 暂时保存的内容
pop 恢复 stash@{id} 暂时保存的内容
show 查看 stash@{id} 变化的文件的差异
查看 stash@{id} 变化文件的详细 diff 内容
git stash show -p
git stash pop 与 git stash apply之间的区别
git stash pop 记录和存储的内容均会出栈
git stash apply 类似将内容复制一份出栈,记录及内容中仍然保留
git reset【版本回退】
git reset <option> <commit>
--soft 本地移动HEAD指针【回退到暂存区状态】
--mixed 本地移动HEAD指针,重置暂存区【未添加到缓存区的状态】
--hard 本地移动HEAD指针,重置暂存区,重置工作区【回退提交版本】
--merge 和 --hard 类似,但会保留当前未添加至暂存区中的文件修改
--keep 和 --hard 类似,同一分支文件修改后回退版本时会提示存在修改文件,无法回退版本;其它分支进行版本回退时,当前分支修改内容会添加至 git 栈中【git stash】
git revert【撤销操作】
git revert 撤销某次
commit操作,但该次撤销操作会作为一条commit记录进行提交
git revert <commit>
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit【这里会有类似于代码合并的冲突选择】
git revert commit_id 撤销指定的版本,撤销也会作为一次提交进行保存
git revert merge_commit_id -m n撤销 merge 中的第 n 次提交
git revert commit_id -m 1回退merge提交commit_id中的第1个commit
git revert commit_id -m 2回退merge提交commit_id中的第2个commit
git remote【远程仓库】
获取远程仓库并管理克隆远程仓库时为其添加的主机名, 通过
git clone [远程仓库地址]克隆远程仓库到本地未指定主机名时,git会为克隆的远程设置一个默认主机名为origin, 主机名就类似与远程仓库地址的一个别名
克隆时自定义远程仓库主机名
git clone -o <主机名> <远程仓库地址>
查看主机名及对应远程仓库地址
-v参数, 没添加参数只查看主机名,添加参数还可以查看主机名对应的远程仓库地址
git remote -v
查看某主机的详细信息
git remote show <主机名>
添加远程主机
git remote add <主机名> <远程仓库地址>
重新命名主机名
git remote rename <旧主机名> <新主机名>
删除远程主机
git remote rm | remove <主机名>
拓展
将另一仓库
repo_b某个分支到某次commit提交合并到当前仓库repo_a某个分支中
- 添加主机名
在本地
repo_a仓库添加repo_b远程仓库主机名,注意不要和repo_a主机名冲突
git remote add <主机名> <远程仓库地址>
- 拉取代码信息
- 拉取
repo_b仓库中有但你没有的信息
git fetch <repo_b主机名>
- 拉取主机名对应远程仓库到某个分支代码信息到本地
git fetch <主机名> <分支名>
- 代码合并
在本地就可以在任意分支使用 git cherry-pick 合并
repo_b任意分支到任意commit
git tag【标签管理】
git tag 查看所有标签
git show name 查看标签信息(文件 diff、标签附注信息等)
git tag name 创建标签 name
git tag -a name -m "提交信息的提示语" 创建标签 name 并添加附注信息
git tag -d name 删除本地 name 标签
git push origin :refs/tags/name 删除远程 name 标签
git push --tag 推送所有标签到远程仓库
git fetch tag name 拉取远程 name 标签代码
给某次 commit 提交打 tag 标签
- 切换到该次
commit提交
git checkout commit_hash
- 给该
commit提交打tag标签
git tag v1.0.1
- 将本地
tag标签提交到远程仓库
git push origin v1.0.1
删除远程分支或本地分支
- 删除远程分支
git push origin[远程主机名] --delete 远程分支名
- 删除本地分支
切到主分支
master
git checkout master
删除本地其他分支
git branch -d 本地分支名
删除远程仓库的跟踪的文件
预览将要删除的文件
git rm -r -n --cached 文件/文件名
删除对应文件并解除文件跟踪
git rm -r --cached 文件/文件名
git commit -m ‘提交说明’
git push origin master
Git推送错误:没有足够的权限将对象添加到存储库数据库?
权限不足,无法在仓库对象库
.git/objects中添加对象
解决方法:
进入 .git/objects 文件
cd .git/objects
通过 ls -al 命令的大部分输出的权限来确定您的名称和组
ls -al
使用 chown 更改对应组内名称的权限
sudo chown -R yourname:yourgroup *