初识Git

对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。

由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库。

基本的 Git 工作流程如下:
1.在工作目录中修改某些文件。
2.对修改后的文件进行快照,然后保存到暂存区域。
3.提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。



一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配置。

Git 提供了一个叫做 git config 的工具(译注:实际是 git-config 命令,只不过可以通过 git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
•/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
•~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
•当前项目的 git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings\$USER。此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。

用户信息
第一个要配置的是你个人的用户名称和电子邮件地址。这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录:
git config --global user.name "Jon Snow"
git config --global user.email game@thrones.com
可以通过git help查看帮助


开始使用
要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:
git init
初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。
git add 命令告诉 Git 开始对这些文件进行跟踪

如果要从远程仓库克隆一份,比如从github网站中弄一份代码下来,执行
git clone https://github.com/zyumle/xxx.git
这会在当前目录下创建一个名为xxx的目录,现在我们手上已经有了一个真实项目的 Git 仓库,并从这个仓库中取出了所有文件的工作拷贝。

执行git status确定哪些文件当前处于什么状态(未追踪、已修改但是未缓存、已缓存等)。

现在在当前目录添加一个新文件test.txt,执行git status,显示
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
说明test.txt还没有被加入版本管理
执行git add test.txt然后再git status
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: test.txt
说明test.txt已经加入了版本管理,处于已暂存(staged)状态
同理修改文件内容后,也需要执行git add使文件加入暂存区

现在修改一个文件
执行git diff来查看尚未暂存的文件更新了哪些部分,此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用 git diff --cached(git diff --staged)
git checkout -- filename 命令表示取消对文件的修改

移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母),以防误删除文件后丢失修改的内容。
另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。换句话说,仅是从跟踪清单中删除。比如一些大型日志文件或者一堆 .a 编译文件,

不小心纳入仓库后,要移除跟踪但不删除文件,以便稍后在 .gitignore 文件中补上,用 --cached 选项即可。

移动文件
git mv 就相当于运行了下面三条命令:
$ mv README.txt README
$ git rm README.txt
$ git add README

提交更改
一切就绪以后使用git commit来提交暂存区内容,这种方式会启动文本编辑器以便输入本次提交的说明。
如果觉得每次修改后还要使用git add来加入暂存区很繁琐的话,可以使用git commit -a,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤。

修改最后一次提交
有时候我们提交完了才发现漏掉了几个文件没有加(忘记加入暂存区),或者提交信息写错了。可以执行git commit --amend来修改上一次提交
此命令将使用当前的暂存区域快照提交。如果上一次提交完没有作任何改动,直接运行此命令的话,相当于重新编辑提交说明。

查看历史
git log查看提交历史
-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新

远程仓库
git remote列出每个远程库的简短名字,在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库。
git remote -v显示对应的克隆地址
git remote show [remote-name] 查看某个远程仓库的详细信息
git remote add [shortname] [url]:添加远程仓库
git remote rename 修改某个远程仓库在本地的简称
git remote rm 移除对应的远端仓库

从远程仓库抓取数据
git fetch origin:抓取远程仓库有的,本地没有的信息,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
git pull:抓取数据并自动合并。

推送到远程仓库
git push [remote-name] [branch-name]将本地仓库中branch-name分支的数据推送到远程仓库remote-name

Pro Git(中文版): http://git.oschina.net/progit/index.html
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值