GitHub学习记录2

获取Git仓库

通常,有两种获取Git项目仓库的方式:

  • 将尚未进行版本控制的本地目录转换为 Git 仓库
  • 从其它服务器 克隆 一个已存在的 Git 仓库

已存在目录中初始化仓库

首先,进入该项目目录中(使用cd或者直接到该文件夹右键)

之后执行:

1
git init

即可完成初始化操作。但此时项目里的文件还没有被跟踪。

克隆现有的仓库

1
git clone https://github.com/libgit2/libgit2

会在当前目录下创建“libgit2”的目录,从远程仓库拉取下所有数据放入 .git 文件夹。

记录每次更新到仓库

通常,我们会对仓库中的文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。

我们的文件有两种状态:已跟踪 或 未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。

编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 在工作时,你可以选择性地将这些修改过的文件放入暂存区,然后提交所有已暂存的修改,如此反复。

Git下文件生命周期图

检查当前文件状态

可以使用git status命令查看哪些文件处于什么状态:

1
git status

现在,分支名是“master”,这是默认的分支名

现在创建一个新的文件,再次检查状态,会看到一个新的未跟踪文件:

跟踪新文件

继续使用git add命令添加README文件:

1
git add README.txt

之后再次查看status:

只要在 Changes to be committed 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件在你运行 git add 时的版本将被留存在后续的历史记录中。 我们使用 git init 后就运行了 git add 命令,开始跟踪当前目录下的文件。 git add 命令使用文件或目录的路径作为参数;如果参数是目录的路径,该命令将递归地跟踪该目录下的所有文件。

暂存已修改的文件

我们来修改一个已被跟踪的文件README,之后运行git status

现在README文件同时出现在暂存区和非暂存区。 实际上 Git 只不过暂存了你运行 git add 命令时的版本。 如果你现在提交,README 的版本是你最后一次运行 git add 命令时的那个版本,而不是你运行 git commit 时,在工作目录中的当前版本。 所以,运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来。

接下来再次运行git status -s,得到详细的信息:

新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。

忽略文件

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。 来看一个实际的 .gitignore 例子:

.gitignore

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#忽略后缀为.a或.o的文件
*.[oa]

#忽略所有名字以~结尾的文件
*~


# 忽略所有的 .a 文件
*.a

# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a

# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO

# 忽略任何目录下名为 build 的文件夹
build/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf

设置完后,已经添加的文件不受影响,未add的文件会受影响

查看已暂存和未暂存的修改

1
git diff

提交更新

使用git commit来提交此次更新

跳过使用暂存区域

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。 Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:这很方便,但是要小心,有时这个选项会将不需要的文件添加到提交中。

移除文件

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “Changes not staged for commit” 部分

查看提交历史

可以使用git log来查看提交历史

撤销操作

在任何一个阶段,你都有可能想要撤消某些操作。

  1. 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交:

    1
    git commit --amend

    这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令), 那么快照会保持不变,而你所修改的只是提交信息。

  2. 你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:

    1
    2
    3
    git commit -m 'initial commit'
    git add forgotten_file
    git commit --amend

取消暂存的文件

使用git reset HEAD 文件名 来取消暂存的文件

1
git reset HEAD CONTRIBUTING.md

撤销对文件的修改

你并不想保留对 CONTRIBUTING.md 文件的修改怎么办? 你该如何方便地撤消修改——将它还原成上次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)?

使用命令: git checkout – 文件名

1
git checkout -- CONTRIBUTING.md

远程仓库的使用

添加远程仓库

1
2
3
git reomte add origin 地址,例:

https://github.com/YasuoSkywalker/My-first-GitHub-Training.git

推送到远程仓库

1
git push