Git学习笔记 2

共613字 阅读时长约2分 访问量

commit, tree与blob的对应关系

  1. 一个commit对应一个tree(唯一一个)
  2. 一个tree可以看作是一次commit之后整个项目的一个快照
  3. 一个tree可能也会包含多个tree
  4. 一个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])

删除不需要的分支

1
git branch -d [branch-name / hash]

修改commit和massage

  1. 修改最新的commit
1
git commit --amend
  1. 修改老旧的commit
1
2
3
git rebase -i [privious-commit-hash]
# 按照提示修改
# 将pick改为reward
  1. 合并多次的commit
1
2
3
git rebase -i [oldest-commit-hash]
# 按照提示修改
# 将pick改为squash
  1. 合并不连续的commit
1
2
3
4
git rebase -i [oldest-commit-hash]
# 未显示出来的需要用到的commit要按照先后顺序手动添加进来
# 把要合并的commit按照先后顺序放在一起
# 将pick改为squash

文件操作

文件的差异
  1. 比较暂存区与head指向的文件差异
1
git diff --cached
  1. 比较工作区与暂存区文件差异
1
2
3
4
5
git diff
# 所以说git diff命令默认比较的是工作区和暂存区的区别,默认所有文件

git diff -- file.name
# 指定文件的差异
文件提交与回退
  1. 暂存区恢复成和HEAD一样

    命令:git reset HEAD

1
2
git reset HEAD
# 清空暂存区所有文件(即取消暂存)
  1. 工作区恢复成和暂存区一样

    命令:git checkout –

1
git checkout -- file.name
  1. 取消暂存区部分文件的暂存

    命令:git reset HEAD

1
git resset HEAD -- file1.name file2.name # ...
  1. 清除最近几次提交
1
git reset --hard [target-commit-hash]
  1. 查看不同提交的指定文件的差异
1
2
3
4
5
6
7
# 比较两分支的差异
git diff branch1 branch2
# 比较特定文件
git diff branch1 branch2 -- file.name

# 直接比较两个commit
git diff commit-hash-1 commit-hash-2 -- file.name
  1. 删除文件的正确方法
1
git rm file.name
  1. 紧急任务处理
1
2
3
4
5
6
7
8
9
10
# 保存当前状态以便处理紧急事件
git stash
# 处理完之后再恢复
git stash pop # 或 git stash apply

# pop 和 apply的区别
# pop恢复并丢掉stash list内容,apply不会

# 查看stash列表
git stash list
指定不需要git管理的文件
.gitignore文件