您的位置:首页 > 编程语言

github学习(pro git)---第二章

2014-08-22 20:19 246 查看
Git基础

本章学习git的一些基本操作,对于不求甚解的来说,这章过后基本的命令已经够用了。

一、Git仓库的获取

有两种方法,一种是在现存目录下,通过导入所有文件来创建新的Git仓库;另一种是从已有的Git仓库中克隆。

要对现有的某个项目实行Git管理

只需在此仓库下执行:

git init

这时在目录下会出现一个.git的目录,可能会好奇没有看到,linux下执行ls-l就可以看到,这个目录是隐藏的。将当前目录下想要纳入版本控制的文件,使用:

git add <文件名>

都添加后使用命令:

git commit -m"添加的备注"

就可以提交了。

从现有的仓库克隆

使用:

git clone [url]

其中url是你要克隆的仓库的url,在网页上每个仓库的右下端都会有一个HTTPS
clone url, 利用它你便可以克隆一个这个仓库了。如果克隆的时候想指明项目目录的名字,在url后面加上名字即可

二、记录每次更新到仓库

通过上面的两步操作之一以后,我们已经拥有一个真实的git仓库,并且也有了很多可以工作的文件。那么下面我们要做的就是进行自己的工作,然后把这些工作更新提交了。

首先我们要明白的是工作目录中的文件只有两种状态:已跟踪或未跟踪。已跟踪的文件是指快照中拥有它们的记录,意思是它们以前就存在于版本控制中,而它们现在可能的状态是未更新,已修改或者已放入暂存区。其它所有文件都属于未跟踪文件,它们既没有快照也没有在暂存区。在编辑过某些文件后它们会被标记为已修改。对于未跟踪的文件,我们使用add命令可以使得其状态改变为被跟踪,在下次提交时它们便会被提交。下面是这些文件状态的变化周期:

检查当前文件状态

使用:

git status

命令可以查看当前的文件状态,它们显示出已被修改过的文件(需要commit的)以及没被跟踪的文件(命令还会温馨的提示你使用gitadd来添加)。同时它还会显示当前的分支(默认是master,新版本中貌似有simple选项)

那么我们想要跟踪一个新文件,可以使用:

git add <文件名>

这样它便会被跟踪了,使用git status查看也会观察到确实发生了变化,它已经处于暂存状态了呢。git
add后面也可以接目录,接目录的话就表示会递归的跟踪该目录下文件。那么从这样看来git add的意思就是把一个文件放入暂存区的意思呢!

暂存已修改的文件

同样如果我们修改了一个文件,那么运行git status会出现changes
not staged for commit的解释,它的意思是说下面的这些文件已经修改了,但是还没有加入暂存区。怎么做呢?还是使用git
add命令。可以看到它是一个多功能的命令。除此之外,还能用于合并时把有冲突的文件标记为已解决。

注意一个细节,如果此时你又修改了该文件,需要再次使用git add,否则git最终提交的是你上一次修改后的文件。

忽略某些文件

如果有写文件你想让一些文件不出现管理中,可以通过创建一个.git ignore来实现。它的格式规范是:

1、所有空行或者以注释符号#开头的行都会被忽略

2、使用glob模式匹配(即shell所使用的简化的正则表达式,*表示匹配零个或多个字符,[abc]匹配放括号中的任何一个字符,?匹配任意一个字符,[]中使用-表示匹配这两个之间的选项)

3、最后跟/说明要忽略的是目录

4、!表示取反,即制定模式外的都会被忽略

查看已暂存和未暂存的跟新

还有一个比git status更详细的命令:

git status

它会指出当前做的哪些更新还没有暂存,哪些已经暂存起来准备下次提交

git diff

diff--git a/name b/name

它会比较这两个已暂存和未暂存文件的差异

要查看已经暂存起来的和上次提交时的快照之间的差异可以用:

git diff --cached

diff--git a/name b/name

或者

git diff --staged

diff--git a/name b/name

提交更新

好了现在我们暂存区域已经准备妥当,可以提交更新了,注意提交前用gitstatus查看一下还有哪些没有gitadd过,否则git不会记录这些没有暂存的变化的。

使用:

git commit

提交,这时一般会启动文本编辑器让你输入此次的提交说明。一般是vim或者emacs吧。如果不想打开文本编辑器,可以用

git commit -m"想要写的内容"

来进行你的操作。

提交后它会告诉你当前是在哪个分支提交的,本次提交的SHA-1校验和是什么,以及有多少文件修改过,多少行修改和删除过。每次提交都是对暂存区做一个快照,以后可以回到这个状态或者进行一次比较。

跳过使用暂存区

如果不想一一使用add可以用命令:

git commit -a -m"说明"

它会自动把所有已跟踪过的文件暂存起来并一起提交

移除文件

如果想要从git目录中移除某个文件,就必须要在暂存区中也移除。使用:

git rm文件名

可以达到这个目的,如果只是手工的从工作目录中删除了这个文件的话,它并不会改变暂存区操作,使用gitstatus还会提醒你使用gitrm

当然如果这个文件你之前修改过,并已经add到暂存区,就要使用-f选项来强制删除。

如果我们只想删除暂存区中的文件,而不想删除本地的文件怎么办呢?使用:

git rm --cached文件名

即可。也可以列出文件或者目录的名字,比如:git rm log/\*.log。注意*之前有\,这个命令会删除log文件夹下所有.log文件,又比如:gitrm
\*~会删除当前目录以及子目录中所有~结尾的文件

移动文件

git mv name1 name2

可以将文件由name1改名为name2,它其实相当于三条命令

查看提交历史

使用:

git log

如果不使用任何参数,那么它会按照时间序列出所有的更新,最近的排在最上面。

在后面使用-p则会展开显示每次提交的具体内容差异,用-2则仅会显示最近两次的更新。使用--stat显示简要的增改行数统计

还可以使用--since,--until来按照时间作限制
撤销操作

修改最后一次提交:

git commit --amend

这个命令会重新提交。

取消已暂存的文件:

git reset HEAD <file>

取消对文件的修改:

git checkout -- <file>

远程仓库的使用

查看当前有哪些远程仓库,可以使用:

git remote命令

后面加上-v的话它会列出对应的远端地址

添加远程仓库:

git remote add [name] [url]

这个命令就可以创建一个远程仓库,现在[name]就会对应于[url]指定的仓库

从远程仓库抓取数据:

git fetch [remote-name]

这个命令会到远程仓库中抓取你本地仓库中还没有的数据。如果当初你是克隆的话,git 默认的仓库名是origin,所以你使用:

git fetch origin就可以从那个克隆的项目中抓取最新的更新了。注意的是,fetch命令只是将数据拉到本地,并不会合并。如果设置了某个分支用于跟踪远端仓库的分支的话,可以使用git pull自动将远端数据抓取下来,并自动合并到当前分支中去。

如果进行到一定的阶段,想要将本地数据推送到远程仓库的话,使用:

git push [remote-name] [branch-name]

例如想将本地master推送到远程的origin服务器上(注意的是如果克隆,默认的就是master和origin名字):git push origin master

只有自己拥有写的权限,同时没有其它人在推送数据时,才能推送。还有特别注意的是,如果在你推送数据之前已经有其他人推送了若干更新,推送会被驳回。我们必须先将他们的更新抓取到本地,合并到自己的项目中,然后才能再次推送。

如果想要查看远程仓库的信息,我们可以通过命令:

git remote show [remote-name]

来查看这个仓库的信息

当然如果我们觉得一个远程仓库的名字不好听了我们可以使用:

git remote rename [old-name] [new-name]

来修改名字,对远程仓库名修改以后,其对应的分支也会智能的重命名

当然如果我们想要移除对应的远端仓库的话,可以使用:

git remote rm [name]

打标签

如果某个时刻的版本我们觉得很重要,可以给其打上标签。

想要显示已有的标签的话使用:

git tag

它会按照字母顺序排列出所有标签。当然用git tag也可以按照你想要的给你返回结果:

git tag -l 'name'

它会进行匹配并返回符合的标签

那么怎么新建标签呢,git使用轻量级的和含标注的标签。轻量级的标签是不会变化的分支,实际上就是一个指向特定提交对象的引用。而含有备注的呢,是一个存储在仓库中的独立对象,有自己的独立的各种信息。

添加含备注的标签:

git tag -a [标签名] -m '标签说明'

使用:

git show [标签名]

可以看到相应标签的版本信息,连同打标签时候的提交对象

如果拥有自己的私钥呢,可以使用GPG来签署标签,把之前命令中的-a改为-s即可

如果我们想创建一个轻量级的标签呢,那就什么都不用就行了:

git tag [标签名]

如果你拥有标签签署者的公钥的话,你可以使用命令:

git tag -v [标签名]

来验证已经签署的标签

如果你之前的某次提交没有添加标签的话,可以使用:

git tag -a [标签名] 【那次提交的校验和的前几位】

默认的情况的话,git push并不会把标签传送到远端服务器上去,只有通过显示命令才能分享标签到远端仓库。它的命令和推送分支很像:

git push [仓库名] [标签名]

如果想将所有的标签都推送上去的话,将标签名改为:--tags即可

一些小技巧

一些命令很长,有的时候常常要用到,所以我们可以给它们一个别名,使用:

git config --global alias.别名  原名

便可以配置为用别名替代原名使用,例如:

git config --global alias.last 'log -1 HEAD'

这个时候我们使用:

git last的效果就和git log -1 HEAD一样了,都会显示最后一次的提交,很方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git github