Git:Git Handbook

2016-08-06  本文已影响145人  onestark

1、基本概念

在 Git 的世界里,有三个地方:工作目录暂存区Git仓库

状态

对应地,工作目录中的文件就有三种状态:已修改、已暂存、已提交

另外要注意的一点是,以上三种状态均建立在文件已被 Git 追踪的前提下。在工作目录新建一个文件,此时文件的状态为未追踪(untracked)。
删除被追踪的文件后,可以查看到的状态是已删除(deleted)

流程

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件;
  2. 暂存文件,将文件的快照放入暂存区域;
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

2、创建

创建仓库

选择一个合适的地方,创建一个空目录,或者使用命令:

$ mkdir learngit
$ cd learngit
$ pwd

pwd 命令只是用于显示当前目录。

初始化仓库

把这个目录变成 Git 可以管理的仓库:

$ git init

可以发现当前目录下多了一个 .git 的目录,这个目录是 Git 来跟踪管理版本库的,不要手动修改/删除这个目录里面的文件。

ls -a 命令就可以列出包括隐藏文件在内的文件。

3、暂存

添加修改到暂存区

暂存区就好像一个码头,先把货物运到这里,再往目的地(版本库)运输。
现在编写一个 README.md 文件,放到 learngit 目录/子目录下,或者使用命令新建:

$ touch README.md

用编辑器打开添加点内容,或在终端中编辑:

$nano README.md

把修改的文件暂存,用于提交:

$ git add README.md

可以一次性添加所有同类型文件的修改:

git add '*.md'

也可以一次性添加所有文件的修改:

$ git add .

4、提交

向版本库提交修改

每次向版本库提交修改最好添加提交信息,first commit 就是一次提交的信息。

$ git commit -m "first commit"

5、查看

查看文件状态

显示工作目录下文件所处状态,这时经常用到的命令:

$ git status

查看文件内容

显示工作区文件与上次提交版本的内容有什么不同。

$ git diff README.md

查看提交记录

显示从最近到最远的提交日志,可查看到每次提交的 40 位 commit id(版本号):

$ git log

查看命令记录

Git 提供了一个命令用来查看你每一次命令的记录:

$ git reflog

重返未来:假如你回退到某个版本,这个版本之后的修改都会被抛弃(其实这很有道理),再想恢复到这个版本之后的版本,这个命令可以查看到所需的 未来 版本号。

6、撤销、回退

撤消文件修改的暂存。可以把添加到暂存区的修改撤销掉(unstage),不改变工作区。

$ git reset HEAD <file>

撤消对工作目录文件的修改。此命令会使用暂存区中的内容替换掉你的工作目录中的文件。(即撤销未提交的修改)

$ git checkout -- <file>

丢弃在本地的所有改动与提交

$ git reset --hard HEAD

回退到某个版本,并抛弃该版本之后的修改

$ git reset --hard <commit id>

commit id 可以换成:

注意:Git 使用 HEAD 指向当前版本。

7、远程仓库

Git 在本地就已经可以实现版本管理的功能,远程仓库有别于存储在你硬盘里的版本库,它存储在网络服务器中,它的发明是为了 Git 的协作和防止本地数据的丢失。

远端服务器上的仓库,克隆一份来本地:

$ git clone username@host:/path/to/repository

其实 clone 命令也可以拷贝本地的仓库,但最常用的还是从远程服务器拷贝。

推送

把本地的修改提交到远程仓库的操作叫做推送(push)。要推送的前提是,必须给当前工作目录指定远程仓库的地址。
使用命令连接一个远程仓库:

$ git remote add origin <server>

这里的 origin 可以是其它你想到的名字,它只不过是用来标识远程仓库的别名而已。但是最常用这个一看就了解的名字。使用 $ git remote 命令可以列出已连接的远程仓库的别名,加 -v 参数可以查看具体地址:$ git remote -v

推送命令:

$ git push -u origin master

把本地分支 master 推送到名为 origin 的远程仓库的。可以把 master 换成你想要推送的任何分支。
注:-u 参数为第一次提交使用,作用是把本地的 master 分支和远程的 master 分支关联起来,简化命令,之后提交不需要这个参数。

更多关于远程仓库

上一篇下一篇

猜你喜欢

热点阅读