git中有本地仓库和远程仓库的概念。本地仓库就是自己的仓库,通常都是在自己的本地仓库中开发。而远程仓库是团队的公共仓库,存放整个项目的代码。大家在各自的本地仓库中开发完各自的部分后,推到远程仓库中。而且定期拉取远程仓库上的代码,以保证自己的本地仓库中为最新代码。
下面介绍本地仓库的一些操作
1、初始化版本库
版本库,也叫版本仓库、仓库,英文名为Repository,经常简写为Repo,是Git用来进行版本管理的主要场所。
创建本地项目目录,进入此目录,初始化版本库,此目录里的目录和文件都会成为git的管理目录和文件。
mkdir testcd testgit init
ll -a
查看目录,出现一个.git
隐藏文件,表示初始化仓库成功。反之,如果不想使用git管理项目了,把.git目录删除即可。
创建版本库时Git自动创建第一个分支master,以及指向master的一个HEAD指针。详情查看分支部分
2、基本流程
git本地仓库分为工作区和版本库两部分。
工作区就是版本仓库所在的项目目录,可以在此目录里增删改目录和文件。工作区里的目录和文件只是被Git“监视”着,但还没有记录在案。这时候如果你新增了文件,或者修改、删除了新创建的文件,Git的态度是“事不关己高高挂起”的。
版本库中除了各个版本(即分支,创建版本库时Git自动创建第一个分支master,以及指向master的一个HEAD指针),还有一个暂存区(stage)。工作区的文件要先提交到暂存区,然后再从暂存区提交到版本库。版本库就是文件在本地仓库的最终归宿,当文件从暂存区提交到版本库时就会形成一个新的版本记录(一个版本记录就代表一个版本,这些版本串接起来就是整个项目的演化历史)。
将工作区中的代码合并到版本库中的操作就叫提交。每一次提交都会在版本库中留下一个记录,日后可以用其来进行对比、回退等操作。
暂存区是版本库中的一个临时场所。文件添加到暂存区后就会受到Git的保护,假如工作区中该文件丢失了,我们可以从暂存区中恢复它。暂存区还可以用来标记出哪些文件是需要提交的而哪些是暂时不想提交的。因为有时候我们的工作区中有很多文件都被修改过,但某一次提交可能只想提交其中的一部分,其他的,例如还没有最终完成的功能,这些文件我们暂时不想提交。利用暂存区可以很方便地满足这种需求。
git管理本地仓库流程图如下
文件从工作区提交到暂存区
git add file_name //将一个文件添加到git管理中git add . //将所有文件添加到git管理中git add -p file_name //询问是否将当前区块加入暂存区。y表示全部加入暂存区;n表示完全不加入暂存区;e表示编辑加入暂存区,在弹出的VIM编辑器里可以把一个文件里不想加入暂存区的内容删除,但是工作区的文件并没有发生任何改变。
文件从暂存区提交进版本库
git commit -m '操作描述' //commit只会提交暂存区的内容到仓库而不会提交没有在暂存区的内容。git commit -am '操作描述' //使用参数-am替代上面的-m可实现绕过暂存区直接提交到当前分支。
3、常用命令
基本流程介绍了文件正常提交的过程。但实际中还会查看状态、撤销提交、版本回滚等。
查看当前的git仓库状态
git status
当创建或修改文件但没有提交时,此文件会标为红色,为未跟踪状态(Untracked files),意思是这个文件正被Git“监视”着,但还没有记录在案。这时候如果你删除了新创建的文件,Git的态度是“事不关己高高挂起”的。
当文件提交到暂存区时,此文件会标为绿色,为要提交状态(changes to be submitted)
当文件从暂存区提交到版本库时,显示工作树为空(noting to commit, working tree clean)
查看与之前版本的区别
git diff file_name
很多时候,我们在决定将一个文件提交到版本库之前希望能够确认一下修改的内容。
diff命令会将工作区中该文件的内容与暂存区中内容或版本库中最后一次提交的内容做对比,并显示两者的差异。如果这个文件之前被添加到了暂存区但还没有提交,那么比较的将是工作区和暂存区之间的差异;否则就会比较工作区和版本库中最后一次提交的内容之间的差异;如果暂存区和版本库中都没有该文件的记录(例如文件是新建的)那么将不会执行比较(什么都不显示)。
撤销修改
//还未提交到暂存区时的撤销方法(当然也可以直接在编辑器中修改啊,这种方法适合撤销大量修改)git checkout -- file_name //实际上是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除。切记不要忘记加--,不然checkout为更改分支操作//已经提交到暂存区时的撤销方法。//先重置一下版本,再checkoutgit reset HEAD file_name //把暂存区的修改回退到工作区。reset命令还可以回退版本git checkout -- file_name//已经提交到版本库,但还没有推送到远程仓库使用版本回滚的方法退回到修改前的版本//已经推送到远程仓库无能为力
删除文件
//删除了工作区的文件,此时文件还在版本库中(如果此时想恢复,用撤销修改的方法恢复)rm -rf file_ name//从版本库中删除此文件,并提交git rm file_namegit commit -m "删除file_name"
查看版本库历史提交
git log //只包括当前分支的commitgit log --pretty=oneline //历史记录在一行里显示git reflog //显示整个本地仓储的commit。包括所有branch的commit, 甚至包括已经撤销的commit, 只要HEAD发生了变化, 就会在reflog里面看得到.
版本回滚(版本恢复)
git reset --hard HEAD^ //几个^表示回滚到上面第几个版本。HEAD^^ 回滚到前面第二个版本git reset --hard HEAD~n //n是数字,代表回滚到前面第几个版本。HEAD~3 回滚到前面第三个版本git reset --hard 版本号 //回滚到具体的版本