GIt的痛定思痛笔记

https://git-scm.com/book/zh/v2

git 安装

由于直接使用apt-get下载安装的hgit版本太低,所以我们使用PPA源的方法

sudo add-apt-repository ppa:git-core/ppa

sudo apt-get update

sudo apt-get install git

安装完成后,检查是否安装成功

git --version

显示 git version x.x.x,表明安装成功。

git配置

(1)设置用户名和email。

git config --global user.name "Your Name"

(2)为GitHub账号添加SSH Keys

系统会提示key的保存位置(一般是~/.ssh目录)和指定口令,保持默认,连续三次回车即可。

(3)Copy SSH Key

然后用vim打开该文件,id_rsa.pub文件内的内容,粘帖到github帐号管理的添加SSH key界面中。

$vim ~/.ssh/id_rsa.pub

(4)添加到GitHub

登录github-> Accounting settings图标-> SSH key-> Add SSH key-> 填写SSH key的名称(可以起一个自己容易区分的),然后将拷贝的~/.ssh/id_rsa.pub文件内容粘帖-> add key”按钮添加。

(5)测试

git基本操作和理解

如果有耐心的话可以通过

git help -a 查看所有的命令

git help -i 查看命令的信息

git help 命令 查看这条命令的文档

例如 git help push

会显示出push的文档,按q键退出文档

一.初始化操作

1.git init

这条命令对于我来说用的不多,这条命令可能对于我来说可有可无.

我的理解是,当你在github网页上新建一个空Repository,想把本地的文件上传到服务器时,init操作是在本地的一个文件夹中建立一个.git文件来记录这个文件夹对应的是github上面的那个Repository

2.git remote add

在init命令后输入这条语句.这样就实现了本地仓库和远程仓库的链接

以下命令查看当前本地仓库对应的(就是链接本地和远程的.git)远程仓库的情况

3.git clone

除了通过init+remote add来创建本地仓库并链接github服务器的项目以外,我们可以通过clone到本地来达到同样的效果

此时会在本地自动创建一个和服务器项目名字一样的文件夹,把服务器上面所有的文件下载下来,并自动创建.git文件,同时对于上面remote add操作,git会默认取别名为origin

二.同步(下载到本地和上传到github服务器)

1.git pull

这一步是init+remote add后把服务器上的文件下载下来的步骤,一般情况是master

可以通过git branch查看分支情况,前面带*的就是当前分支

如果是通过clone进行则不需要这一步,因为clone里面已经包含了下载服务器上面的文件的任务

2.$ git add -A //-A表示的是提交所有文件的修改$ git commit -m "这是是这次提交时附加的消息" //参数-m 代表加上附加信息$ git push

在把服务器上面的内容拷贝到本地后,你开始了自己的修改,文件发生了改变. 上面三个步骤是把本地的文件改动提交到github服务器上

注意:只有当你有所克隆服务器的写入权限,并且之前没有人推送过时,这条命令才能生效。 当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,你的推送就会毫无疑问地被拒绝。 你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。 这就是文件冲突(我的理解).

三.提交到上游主干

如果你的这个项目是从别人的仓库中fork来的分支,如果你想把自己的改动提交到别人的仓库中,可以在网页自己账户的仓库中,点击new pull request,然后create pull request

四.查看状态

git status

要查看哪些文件处于什么状态

1.

这说明你现在的工作目录相当干净。换句话说,所有已跟踪文件在上次提交后都未被更改过。

2.在项目下创建一个新的 README 文件

未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;

3.使用命令 git add 开始跟踪一个文件。要跟踪 README 文件,运行:

此时再运行 git status 命令,会看到 README 文件已被跟踪,并处于暂存状态:

只要在 Changes to be committed 这行下面的,就说明是已暂存状态。

4.暂存已修改文件

现在我们来修改一个已被跟踪的文件。 如果你修改了一个名为 CONTRIBUTING.md 的已被跟踪的文件,然后运行 git status 命令,会看到下面内容:

文件 CONTRIBUTING.md 出现在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。 要暂存这次更新,需要运行 git add 命令。 这是个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。 将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适。 现在让我们运行 git add 将"CONTRIBUTING.md"放到暂存区,然后再看看 git status 的输出:

五.提交更新

1.$ git commit

这种方式会启动文本编辑器以便输入本次提交的说明。 (默认会启用 shell 的环境变量 $EDITOR 所指定的软件,一般都是 vim 或 emacs。当然也可以使用 git config --global core.editor 命令设定你喜欢的编辑软件。)

编辑器会显示类似下面的文本信息(本例选用 Vim 的屏显方式展示):

可以看到,默认的提交消息包含最后一次运行 git status 的输出,放在注释行里,另外开头还有一空行,供你输入提交说明。 你完全可以去掉这些注释行,不过留着也没关系,多少能帮你回想起这次更新的内容有哪些。 (如果想要更详细的对修改了哪些内容的提示,可以用 -v 选项,这会将你所做的改变的 diff 输出放到编辑器中从而使你知道本次提交具体做了哪些修改。) 退出编辑器时,Git 会丢掉注释行,用你输入提交附带信息生成一次提交。

2.$ git commit -m "附加信息"

另外,你也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行,如下所示:

六.跳过使用暂存区域

git commit -a

只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤,例如:

七.移除文件

1. git rm

从暂存区域移除,并连带从工作目录中删除指定的文件

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母)。

这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。

2. git rm --cached

把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。

当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。

为达到这一目的,使用 --cached 选项.

利用这种方式,可以删除一类我们不需要的文件

此命令删除 log/ 目录下扩展名为 .log 的所有文件。

注意到星号 * 之前的反斜杠 \, 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不得不不用 shell 来帮忙展开。

类似的比如:

该命令为删除以 ~ 结尾的所有文件。

八. 查看提交历史

git log

九.撤消操作

1.$ git commit --amend

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

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

文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。

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

最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。

2.取消暂存的文件

演示如何操作暂存区域与工作目录中已修改的文件。 这些命令在修改文件状态的同时,也会提示如何撤消操作。

例如,你已经修改了两个文件并且想要将它们作为两次独立的修改提交,但是却意外地输入了 git add * 暂存了它们两个。 如何只取消暂存两个中的一个呢?

git status 命令提示了你:

在 “Changes to be committed” 文字正下方,提示使用 git reset HEAD... 来取消暂存。 所以,我们可以这样来取消暂存 CONTRIBUTING.md 文件:

这个命令有点儿奇怪,但是起作用了。 CONTRIBUTING.md 文件已经是修改未暂存的状态了。

Note

虽然在调用时加上 --hard 选项可以令 git reset 成为一个危险的命令(译注:可能导致工作目录中所有当前进度丢失!),但本例中工作目录内的文件并不会被修改。 不加选项地调用 git reset 并不危险 — 它只会修改暂存区域。

3.撤消对文件的修改

如果你并不想保留对 CONTRIBUTING.md 文件的修改怎么办? 你该如何方便地撤消修改 - 将它还原成上次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)? 幸运的是,git status 也告诉了你应该如何做。 在最后一个例子中,未暂存区域是这样:

它非常清楚地告诉了你如何撤消之前所做的修改。 让我们来按照提示执行:

可以看到那些修改已经被撤消了。

Important

你需要知道 git checkout -- [file] 是一个危险的命令,这很重要。 你对那个文件做的任何修改都会消失 - 你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令。

如果你仍然想保留对那个文件做出的修改,但是现在仍然需要撤消,我们将会在 Git 分支 介绍保存进度与分支;这些通常是更好的做法。

记住,在 Git 中任何 已提交的 东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用 --amend 选项覆盖的提交也可以恢复。 然而,任何你未提交的东西丢失后很可能再也找不到了。

十.remote-远程仓库使用

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180429G0I4WB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券