git配置相关
查看git各项配置
$ git config --list
配置用户名和邮箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
添加暂存区
$ git add filename1 filename2 filename3 ....
$ git add .
添加版本库
$ git commit -m"add files"
注意,
commit
操作只会提交已经add了的文件,也就是已经存在暂存区中的文件了,没有add的文件不会被提交
对比
$ git diff filename1
git diff 是对比上次add(暂存区)和当前修改(工作区)的对比。
diff只能监测行的改动,对行的每一个操作都会被认为删除当前行,新加了一个不一样的行。1 deletion(-),1 insertion(+)
简单理解就是对比add前和add后的对比
特别注意,假如commit了,不要误认为暂存区区就没有内容了,diff命令就失效了,此时暂存区内仍有最近一次add的内容,所以diff命令依然会比较当前工作区和暂存区的区别
git diff:是查看working tree与index file的差别的。
git diff –cached:是查看index file与commit的差别的。
git diff HEAD:是查看working tree和commit的差别的。
git diff HEAD — readme.txt 和版本库对比
git diff — readme.txt 和暂存区对比
git diff HEAD -- readme.txt
命令是对比当前工作区
readme.txt文件和版本库
中readme.txt文件的区别,注意,这个命令跨过了暂存区
进行对比
查看日志
完整显示
$ git log
最近的提交在上面,最早的提交在下面
简单显示方式
git log --pretty=oneline
版本回退
HEAD
代表当前版本,HEAD^
代表上一个版本,上上个版本就是HEAD^^
,依次类推,HEAD~25
则是回退到上25个版本,下面命令是回退到上个版本,也可以使用git reset --hard HEAD~
或git reset --hard HEAD~1
一样的效果
$ git reset --hard HEAD^
也可以通过版本号的方式进行,下面就是回退到git log
里的版本号为48122212
的版本
$ git reset -hard 48122212
假如有A3、A2、A1三个版,当前在A3版本,使用命令回退到了A2的版本,只要当前命令窗口没有关闭,可以找到在
git log
时,显示的A3的版本号,即可使用git reset --hard A3版本号
命令“恢复
”到A3的版本
不过,如果窗口关闭了也没有事,使用如下命令,即可显示操作的每一次命令,并且有版本号,此时应该明白如何回退了吧
$ git reflog
修改工作区后回退和add后的回退
vim readme.txt 修改
$ git checkout -- readme.txt 还原修改之前
vim readme.txt 修改
$ git add readme.txt
$ git checkout -- readme.txt 不能还原修改之前
需要
$ git reset HEAD readme.txt 清除暂存区的add
然后再
$ git checkout -- readme.txt 还原之前修改
另外个方法
vim readme.txt 修改
$ git add readme.txt
$ git checkout -- readme.txt 不能还原修改之前
直接
git reset --hard 版本号
直接回退到某版本号,暂存区也清空
删除文件回退方法(修改同理)
一、rm只删除工作区信息;
使用 git checkout -- file即可恢复;
二、git rm 删除工作区和暂存区信息;
1、使用git reset HEAD -- file即可恢复;
2、恢复步骤:
1)先使用git reset HeAD -- file从版本库把已删除信息copy到到暂存区;
2)再使用git checkout -- file从暂存区把已删除信息copy到工作区。over!!!
3)这时你就看到删除的文件又回来啦。啦啦啦!
三、git commit -m “file”删除工作区,暂存区和版本库信息;
1、使用git reset --hard HEAD^即可恢复或git reset HEAD^。
`特别说明`
git reset --hard HEAD^
彻底撤销最近的提交。引用回退到前一次,而且工作区和暂存区都会回退到上一次提交的状态。自上一次以来的提交全部丢失。
git reset HEAD^ <指定文件,不写即全部>
工作不改变,但是暂存区会回退到上一次提交之前,引用也会回退一次。
2、恢复步骤:
1) git reset HEAD^ <指定文件,不写即全部>
1)最后,使用git checkout -- file从暂存区把已删除信息copy到工作区。
1)这时你就看到删除的文件又回来啦。啦啦啦!
以上我都亲自试过,很好用。
远端库
origin
是远端库的默认名称,也可以改成自己喜欢的名字,无意外,建议默认
本地库关联远端库(先有本地库,后有远端库,二者要关联)
git remote add origin 这里换成github上的库地址
或者克隆远端库到本地(本地库没有,直接克隆远端库到本地)
git clone 这里换成github上的库地址
修改本地库和远端库的关联
git remte origin set-url 这里换成github上的库地址
master
是远端库的名字,也是默认的,建议不动
使用关联远端库的方式的推送
# `-u`的意思是关联本地`master`和远端库的意思`master`
# 往后的推送命令就是用git push origin master推送即可,不需要加-u了,
# 只是第一次要加而已
git push -u origin master
使用克隆的方式的推送
git push origin master
查看远端库
git remote -v
分支
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
此时就在分支下进行编辑,之后一样add和commit进行操作~
合并某分支到当前分支:git merge <name>
(此为快速合并Fast forward
,出现冲突的时候就必须手动清除冲突了)
删除分支:git branch -d <name>
清除冲突
建分支,add和commit切换回master,在master下merge 下dev
分支报错了,需要清除冲突!
$ git merge dev
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
查看冲突文件如下,HEAD
代表当前分支内容,dev
代表分支内容,手动去掉冲突内容或者直接全部不要写新的内容都可以,反正要去掉<<<<
、====
、>>>>
、HEAD
、dev
这几个标记
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev
之后再add和commit,此时分支冲突就解决了
$ git add readme.txt
$ git commit -m "conflict fixed"
[master 59bc1cb] conflict fixed
不过不太建议使用
Fast forward
快速合并模式,为什么后面说明
查看分支情况,简单版
git log --graph --pretty=oneline --abbrev-commit
查看分支情况,详细版
git log --graph
为什么不建议使用Fast forward
模式?
因为使用Fast forward
快速何必模式,会丢失分支信息,看不出做出个分支合并的操作,多人开发时,出现问题不好定位,所以merge的时候使用普通模式--no-ff
原来的git merge dev
改成如下命令
git merge --no-ff -m "merge with no-ff" dev
意思是使用普通模式合并(会保留分支信息),这样git会merge的时候生成一个新的commit
查看时使用下面命令,就可以看出分支合并的操作了
git log --graph --pretty=oneline --abbrev-commit