Git是分布式的版本控制系统,包含三大对象,commit是当前时刻提交的版本对象,里面包含根节点tree,tree指向子节点tree或者叶节点blob,叶子节点blob是真正的文件内容。
常见命令学习
基本命令
git config —global user.name ‘’ # 设置提交的用户名和email
git config —global user.email ‘’
git init newproject # 新建项目
git status # 查看文件状态
暂存区命令
git add file1 # 将工作目录文件添加到暂存区,暂存区进可提交,退可回滚
git add -u # 添加所有修改的文件到暂存区
git mv file1 file2 # 重命名暂存区文件
gir rm file # 删除工作目录文件file,同时更新到暂存区
git diff [— filename] # 对比工作区和暂存区所有文件的差异,可以指定filename进行对比
git diff —cache # 比较HEAD文件和暂存区文件,然后再提交
git reset HEAD # 恢复暂存区为最新提交的
git stash [pop] # 临时存放[恢复]当前工作目录状态
git checkout — file # 将工作区文件恢复为暂存区文件

仓库区命令
git commit -m’提交日志信息’ # 将暂存区文件提交到历史版本中
git commit —amend # 修改最近一次的提交日志信息
git rebase -i commmitid +r # 修改commitid的子commit r的提交日志信息
git rebase -i commmitid +s # 合并commitid的子commit以及s的提交日志信息
git log -n5 —oneline # 一行行地显示最近5条提交日志信息
git diff commit1 commit2 [— file] # 比较两次提交的所有文件/指定文件的差异
git diff HEAD HEAD~2 # 比较HEAD和HEAD的父版本的父版本
git cat-file -p hashid # 查看hashid指向的对象内容
git reset —hard commitid # 将HEAD指向commitid,丢掉commitid之后的提交

Git分支管理
本地分支管理
git branch -av # 查看所有分支及当前分支
git branch glt commitid # 由commitid来新建名为glt的分支
git branch -d addreadme # 删除名为addreadme的分支
git checkout -b glt commitid # 由commitid来新建名为glt的分支,并让HEAD指向该分支
git checkout commitid # 让HEAD指向树中间的commitid而不是分支,导致分离头指针,HEAD不属于任何分支的commit有可能被丢弃
git checkout master # 切换回master分支
gitk # 图形化查看版本信息
.gitignore # 该文件内容为不需要git管控的文件或者文件夹
远端分支合并
本地分支可以通过push备份到远端,然后进行合并。
git remote -v # 查看本地的远程版本库信息
git remote add xxx
git fetch xxx # 拉取远程版本库xxx到本地
git merge -h # 查看合并帮助信息
git merge —allow-unrelated-histories xxx/master # 合并当前分支和xxx上的master分支(两分支不是父子关系fast forward,所以合并需要添加 —allow-unrelated-histories)
git push xxx # 将本地的xxx推送更新到远程服务器上
当两个人修改不同文件或者同文件不同区域时,后push的人需要先fetch并merge别人的更新,然后再push。
同理,当两个人修改同文件相同同区域时,后push的人需要先pull(包含fetch和merge),并协商取舍后手动更新文件,然后再push。
Git高危命令
git reset —hard commitid # 回退到之前的commitit
git push -f xxx # 强制push到远端进行更新,可能会丢弃别人的工作版本
禁止对集成分支的历史commit做rebase操作,要根据集成分支的最新commit来提交更新。
rebase相当于在此之后的commit都重新提交,慎重使用。
GitHub高级功能
高级搜索:stars:>1000,in:readme
issue跟踪需求和任务
看板管理任务进程
pull request合并之前代码review
merge三种策略:merge、squash、rebase