git-study
commit, tree与blob的对应关系
- 一个commit对应一个tree(唯一一个)
- 一个tree可以看作是一次commit之后整个项目的一个快照
- 一个tree可能也会包含多个tree
- 一个blob对应一个文件
分离头指针注意的问题
当切换到没有绑定分支的commit时,并对其当中的文件修改,最终提交commit保存后会出现"warning: you are leaving 1 sommit behind, not connected to any of your branches."
这时的commit被git看作不重要,可能会被git所清理,如果你要保存这个commit就要新建分支(git branch new-branch-name [分支hash])
删除不需要的分支
git branch -d [branch-name / hash]
修改commit和massage
- 修改最新的commit
git commit --amend
- 修改老旧的commit
git rebase -i [privious-commit-hash]
# 按照提示修改
# 将pick改为reward
- 合并多次的commit
git rebase -i [oldest-commit-hash]
# 按照提示修改
# 将pick改为squash
- 合并不连续的commit
git rebase -i [oldest-commit-hash]
# 未显示出来的需要用到的commit要按照先后顺序手动添加进来
# 把要合并的commit按照先后顺序放在一起
# 将pick改为squash
文件操作
文件的差异
- 比较暂存区与head指向的文件差异
git diff --cached
- 比较工作区与暂存区文件差异
git diff
# 所以说git diff命令默认比较的是工作区和暂存区的区别,默认所有文件
git diff -- file.name
# 指定文件的差异
文件提交与回退
- 暂存区恢复成和HEAD一样
命令:git reset HEAD <file>...
git reset HEAD
# 清空暂存区所有文件(即取消暂存)
-
工作区恢复成和暂存区一样
命令:
git checkout -- <file>...
git checkout -- file.name
-
取消暂存区部分文件的暂存
命令
git reset HEAD <file>...
git resset HEAD -- file1.name file2.name # ...
- 清除最近几次提交
git reset --hard [target-commit-hash]
- 查看不同提交的指定文件的差异
# 比较两分支的差异
git diff branch1 branch2
# 比较特定文件
git diff branch1 branch2 -- file.name
# 直接比较两个commit
git diff commit-hash-1 commit-hash-2 -- file.name
- 删除文件的正确方法
git rm file.name
- 紧急任务处理
# 保存当前状态以便处理紧急事件
git stash
# 处理完之后再恢复
git stash pop # 或 git stash apply
# pop 和 apply的区别
# pop恢复并丢掉stash list内容,apply不会
# 查看stash列表
git stash list
指定不需要git管理的文件
.gitignore文件
网友评论