获取Git仓库(Git repository)
- 使用Git的第一步是要获取一个Git仓库,我们使用Git的操作对象都是存放在Git仓库里,获取Git仓库的方式有两种:
- 导入一个项目或目录到Git,初始化(init)生成Git仓库;
从远程服务器克隆(clone)一个Git仓库。
初始化仓库(init)
若我们需要使用一个项目或目录生成一个Git仓库,只需要通过命令行进入该目录,执行如下Git指令:
git init
此操作将在此目录生成一个.git子目录,该目录包含整个仓库结构,即仓库的所有文件;同时会检出(checkout)一个默认工作分支,通常名为master。
此时,我们只是初始化生成了一个Git仓库,还未添加需要进行版本控制的对象–文件或目录。
克隆仓库(clone)
很多时候,我们需要从远程服务器获取一个已存在的Git仓库,我们只需要使用如下指令:
git clone https://github.com/HuangQinJian/WeiBo
git clone后面跟着的url就是已存在的Git仓库地址,我们需要知道的是Git克隆是对服务器上仓库的一次近乎完整的数据拷贝,当前仓库项目的所有文件及其各版本历史都会被获取。
执行如上指令后,会在当前目录创建一个WeiBo目录并在WeiBo中初始化一个.git子目录,拉取仓库的所有数据,然后根据仓库(或项目)的最新版本检出(check out)一个工作分支,通常该分支默认名称为master。
工作目录及其内对象的状态
相关指令:
git status
当我们获取一个仓库,如克隆一个远端仓库后,在仓库目录执行上面指令,如图所示:
- 图中第一行on branch master告诉我们当前我们处在名为master的分支;
- 第二行up-to-date with ‘origin/master’,说明目前分支与远程仓库的master分支保持同步最新版本;
- 第三行working directory clean,说明目前仓库中没有新加或修改过的对象(文件或目录)。
添加对象(git add)
添加版本控制对象的指令是git add,比如,我们可以使用如下指令添加一个test.txt文件,当然我们首先需要在仓库目录下,创建该文件(任意方式创建),查看状态:
如上图,显示test.txt文件为Untracked file,并且提示:use git add to track; 然后使用git add指令后:
git add test.txt
再次执行git status指令:
如上,出现:Changes to be committed,说明该文件已被标记(tracked)且被暂存,我们可以进行提交了。
提交变更(git commit)
所有的变更,最终都需要提交,才能在本地持久化报存,在将所有变更暂存(git add)后,我们就可以进行提交了,相关指令就是:
git commit
在输入如上指令后,将进入Git commit信息编辑状态:
我们可以编辑本次提交的备注信息,其中的默认备注信息都以#开头,表明提交时会被忽略。
git commit指令告诉Git持久化记录(提交)我们暂存区(staging area)中的快照,任何未被暂存的变更,不会被添加进暂存区的快照,仍然保留在当前工作目录,我们可以随后提交。
注意:此时变化只是在本地持久化报存!!!并没有更新到版本库中,即GitHub网页上,需进行git push origin master操作,即最后一步操作!!!
除了使用默认的git commit指令,我们还可以添加-v参数,在提交信息中显示变更内容,如下:
如上图,和之前的比较,除了基本的提示,还有文件变更内容提示,可以避免某些误提交。
行内输入提交信息(git commit -m)
当然,Git还支持我们使用-m参数,指明我们在使用git commit指令时直接填写提交备注信息:
查看提交历史(git log)
本节要介绍的是如何查看之前的提交历史及信息,你应该知道的git log指令,
默认地,不带参数时,执行git log指令,输出的是当前仓库按逆序排序(最近提交在最前)的提交记录:
删除对象(git rm)
很多时候,我们也会需要从Git仓库中删除某些对象,rm就是删除文件或目录的指令,但是需要特别强调的是,该指令只是将某对象从当前工作目录删除,如:
使用rm后,当前状态是”Changes not staged for commit:”此次变更未被暂存和提交。
若你需要将某对象从已标记文件或暂存区删除,则需要使用git rm指令,如下:
使用git rm后,变更会被暂存。
当修改了最后一次提交的修改操作,意味着已经准备好将更改。推操作的数据永久存储的Git仓库。推操作成功后,其他开发人员可以看到Git仓库的变化!!!
Git仓库的变化成功地推到版本库,现在其他开发人员可以查看他的变化进行克隆或更新操作。
分支相关操作
1、查看远程分支有哪些
git branch -a
2、创建新分支
git branch testing
3、当前所在的本地分支
git log --oneline --decorate
4、分支切换
git checkout testing
5、删除本地分支
git branch -d testing
6、删除远程分支
git push origin --delete testing
Git fetch和pull的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令:
git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上;然后比较本地的master分支和origin/master分支的差别;最后进行合并。上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp
git diff tmp
git merge tmp
从远程获取最新的版本到本地的tmp分支上之后再进行比较合并
git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge 在实际使用中,git fetch更安全一些。因为在merge前,我们可以查看更新情况,然后再决定是否合并结束。