安装git
sudo apt-get install git
创建版本库
git init
版本创建与回退
版本创建
加入暂存区
文件修改或增加后
git add filename
删除文件
git rm filename
或者
rm filename
git add filename
提交暂存区内容到版本库
git commit -m ‘version name‘
版本记录查看
git log
以简短形式查看
git log --pretty=oneline
仅查看少数记录
git log -n
以连接线形式查看
git log --graph
版本回退
git reset --hard HEAD^
git reset --hard HEAD~3
撤销版本回退
git reset --hard commit_id
查看操作记录
git reflog
工作区和暂存区
暂存区:.git
文件夹是git的版本库,其中最重要的就是称为stage的暂存区,还有git 自动创建的第一个分支master,以及指向master的指针HEAD(每次commit后HEAD指向最新版本),git add
把文件修改添加到暂存区,git commit
提交修改,实际上就是把暂存区的所有内容提交到当前分支
查看工作区状态命令
git status
撤销修改
修改后未进行git add/rm
的情况
git checkout -- filename
修改后已进行git add/rm
的情况
首先取消暂存区该文件的暂存
git reset HEAD filename
再使用上面命令进行复原
git checkout --filename
修改后已进行git add
和git commit
只能进行版本回退来恢复
对比文件不同
对比工作区和某个版本中文件的不同
git diff HEAD_pointer -- filename(In the working directory)
---
对应HEAD指向版本的文件,+++
代表工作区中文件
对比两个版本中文件的不同
git diff HEAD HEAD^ -- filename
---
对应HEAD版本的文件
+++
对应HEAD^版本的文件
多个分支可以理解为互不干扰的流水线
分支基本操作
分支创建与合并
默认在主分支mater上进行操作,HEAD严格来说不是指向commit,而是指向分支,分支的指针才是指向提交的,即HEAD指向的是当前分支
创建新分支一定程度上可以理解为创建了一个新的分支指针
查看当前有几个分支和当前所在分支
git branch
*
表示当前HEAD
所指向的分支
创建分支
git branch branchname
切换分支
git checkout branch_name
创建并切换到新分支
切换即改变HEAD所指向的分支
git checkout -b branch_name
新分支有旧分支的所有内容
合并分支
git merge branch_name
fast-forward
表示快速合并,即仅仅移动分支指针,默认情况下使用快速合并
解决分支冲突
即在两个分支中对同一个文件进行了commit
此时合并时候存在分支冲突,此时用git status
查看分支冲突对应的文件
然后用编辑器查看相应文件,git用<<<<<<<
,=======
,>>>>>>>>
标记出不同分支的内容,
通过手动修改文件并进行add和commit后实现手动解决分支冲突
分支管理策略
合并分支是,如果可能,git默认使用fast forward模式,但是有些快速合并不能合并修改但不会产生分支冲突(例如在两个分支中分别修改了不同的文件),这个时候git会自动在合并之后做一次新的comit
这种情况下会自动跳出GNU Nano,用来输入commit的注释
Bug分支
强制禁用fast forward模式,git会在merge时生成一个新的commit
git merge --no-ff -m ‘annotation‘ branch_name
储存和复原分支现场
即需要切换到bug分支时,本分支的内容还未进行commit,则需要进行现场保存
Bug修复过程
将工作现场储藏起来
git stash
修复bug完成后回到原来编辑的分支继续
- 查看分支现场储存列表
`git stash list`
- 恢复工作现场
`git stash pop`
原文:https://www.cnblogs.com/Eric-Shenblog/p/10958111.html