前言:平时工作中的代码管理用到了Git,所以就总结下Git;
推荐一篇写的很好的关于Git的教程,简单易懂:Git教程
1.把文件添加到版本库
git add readme.txt
git add file2.txt file3.txt
git commit -m "wrote a readme file"
git add是将修改从工作区提交到暂存区,git commit是将修改从暂存区提交到版本库;
2.了解版本库当前的状态
$ git status
3.查看修改内容
git diff readme.txt
显示的是,工作区的内容与暂存区或者版本库的区别;
还可以这样写:
$ git diff HEAD -- readme.txt
查看工作区和版本库里面最新版本的区别,其中HEAD可以替换成commit id,那就表示查看当前工作区和指定版本库里面版本的区别;
4.回退到相应版本
(1)找到commit id:
①查看命令历史,哪怕关机后再开机也是还会有的:
git reflog
②查看commit的历史记录,以便确定要回退到哪个版本:
$ git log
或者(可以减少log输出):
$ git log --pretty=oneline
(2)回退版本
$ git reset --hard HEAD^
HEAD
表示当前版本,也可以将它替换成commit id,如1094adb...
,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
5.撤销修改
(1)撤销工作区的修改
①还没有进行git add,暂存区没有内容,撤销工作区的修改,使其跟版本库一致;
$ git checkout -- readme.txt
②已经执行了git add,暂存区中有了内容,但是没有撤销工作执行git commit,撤销工作区的修改,使其跟暂存区一致;
$ git checkout -- readme.txt
注意git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令;
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
(2)撤销暂存区的修改
已经执行了git add将修改提交到了暂存区,但是发现这次提交有问题,需要撤销暂存区的修改:
①先将暂存区的修改回退到工作区;
$ git reset HEAD readme.txt
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
②再将工作区的修改撤销;
$ git checkout -- readme.txt
(3)撤销版本库的修改
假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?
参考版本回退一节吗,可以回退到上一个版本;
6.删除文件
(1)先将工作区中文件删除:
$ rm test.txt
(2)查看哪些文件被删除了:
$ git status
(3)现在有两个选择,一种情况是确实要从版本库中删除该文件,另一种情况是删错了,需要恢复文件:
①删除
$ git rm test.txt
$ git commit -m "remove test.txt"
现在,文件就从版本库中被删除了。
注意:先手动删除文件,然后使用git rm <file>和git add<file>效果是一样的。
②恢复
$ git checkout -- test.txt
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”;
但是只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容;
7.创建与合并分支
(1)创建dev
分支:
$ git branch dev
(2)切换到dev
分支:
$ git checkout dev
(1)和(2)也可以合并写成:
$ git checkout -b dev
git checkout
命令加上-b
参数表示创建并切换;
(3)查看当前分支:
$ git branch
git branch
命令会列出所有分支,当前分支前面会标一个*
号;
(4)dev分支开切换回master分支:
dev分支上的开发结束后,需要切换回master分支:
$ git checkout master
(5)dev
分支的工作成果合并到master
分支上:
$ git merge dev
git merge
命令用于合并指定分支到当前分支;
(6)删除dev
分支:
合并完成后,就可以放心地删除dev
分支了:
$ git branch -d dev
(7)查看branch:
$ git branch
此时只剩下master
分支;
8.解决冲突
虽然冲突有很多种,如git pull冲突,git merge冲突,git pull冲突的本质还是git merge冲突,因为拉取代码的时候,需要将本地代码与服务器代码进行合并,但是本地和服务器修改了同一处的代码,所以会出现冲突;
看下git merge冲突的解决:
merge冲突就是我们在两个分支的同一个文件上修改了内容,当我们要合并分支的时候,出现了冲突,如:
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
Git告诉我们,readme.txt
文件存在冲突,必须手动解决冲突后再提交;
解决方案:
(1)查看冲突的文件
$ git status
(2)找到冲突文件是readme.txt,查看readme.txt的内容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容;
(3)手动解决冲突,修改readme.txt如下后保存:
Creating a new branch is quick and simple.
(4)再次提交:
$ git add readme.txt
$ git commit -m "conflict fixed"
[master cf810e4] conflict fixed