Git 命令

记录一下git命令的一些用法

基础

Git是一个命令行实用程序的集合,它会跟踪和记录文件中的更改(通常是源代码,但是可以跟踪任何你想要的文件)。
有了它,你可以恢复项目的旧版本,比较,分析,合并更改等操作。
这个过程被称为版本控制。
有许多版本控制系统可以完成这项工作。
你可能听说过其中的一些–SVN,Mercurial,Perforce,CVS,Bitkeeper等等。
Git是分散的,这意味着它不依赖于中央服务器来保留文件的旧版本。
相反,它完全在本地运行,将这些数据作为一个文件夹存储在硬盘上,我们称之为储存仓库。
但是,你也可以在线存储您的仓库的副本,这使得多个人可以轻松协作并使用相同的代码。这就是像GitHub和BitBucket这样的网站所使用的一样。

1.安装Git

在你的设备上安装Git很简单:
Linux - 只需打开一个新的终端,并通过发行版的软件包管理器安装git。
对于Ubuntu的命令是:

  • sudo apt-get install git

Windows - 我们推荐

  • git for windows,

因为它提供了一个GUI可视化客户端和一个BASH命令行模拟器。

OS X - 最简单的方法是安装
自助软件,然后brew install git从终端
运行。
如果你是一个绝对的初学者,那么一个图形化的git客户端是必须的。
我强烈推荐使用GitHub Desktop和Sourcetree,但是还有许多其他好的和免费的在线。
即使使用GUI应用程序,了解基本的git命令仍然很重要,因此在本文剩下的部分中,这将是我们唯一说的重点。

2.配置Git

现在我们已经在我们的计算机上安装了git,我们将需要添加一些快速配置。
有很多可以摆弄的选项,但是我们要设置最重要的选项:我们的用户名和电子邮件。
打开一个终端并运行这些命令:

  • $ git config –global user.name “My Name”

我们在Git中所做的每一个动作现在都会贴上我们的名字和地址。
这样用户总是知道谁做了什么,一切都更有条理。

3.创建一个新的存储库 - git init

正如我们前面提到的,git将它的文件和历史记录直接存储在项目文件夹中。要建立一个新的存储库,我们需要打开一个终端,导航到我们的项目目录并运行git init。这将打开Git这个特定的文件夹,并创建一个隐藏的.git目录,其中存储库的历史和配置。

在桌面上创建一个名为git_exercise的文件夹,打开一个新的终端并输入以下内容:

  • $ cd Desktop/git_exercise/
  • $ git init

命令行应该按照以下方式输出:

  • Initialized empty Git repository in /home/user/Desktop/git_exercise/.git/

这意味着我们的已经成功创建,但内容仍然是空的。现在创建一个名为hello.txt的简单文本文件,并将其保存在git_exercise文件夹中。

4.检查状态 - git status

Git status 是另一个必须知道的命令,它返回关于仓库当前状态的信息:一切是最新的信心,那些是最新的,哪些是改变的,等等。
运行git status 在我们新创建的Log应该返回以下内容:

1
2
3
4
5
6
7
8
9
10
$ git status

On branch master

Initial commit

Untracked files:
(use "git add ..." to include in what will be committed)

hello.tx

返回的消息指出hello.txt未被跟踪。这意味着文件是新的,Git不知道它是否应该跟踪发生在这个文件上的变化,或者忽略它。为了确认新文件,我们需要对其进行分类。

5.添加 - git add

Git有一个“暂存区”的概念。你可以把它想象成一个空白的画布,它保存着你想要提交的变化。它开始是空的,但你可以用命令添加文件(甚至是单行和部分文件)git add,最后提交所有的文件(创建一个快照)git commit。
文件:

  • $ git add hello.txt

如果我们想在目录中添加所有内容,我们可以使用:

  • $ git add -A

再次检查状态 输入 git status应该返回以前的不同输出。

1
2
3
4
5
6
7
8
9
10
11
$ git status

On branch master

Initial commit

Changes to be committed:

(use"git rm --cached ..." to unstage)

new file: hello.txt

我们的文件已准备好提交。
状态消息还提示我们暂存区中的文件有什么变化 - 在这种情况下是
新文件,但是可以修改或删除它,这取决于自上次文件发生了什么git add。

6.提交 - git commit

一个提交表示在给定的时间点我们的仓库的状态。这就像一个日志记录,我们可以回顾一下,看看我们拿什么。
要创建一个新的提交,我们需要至少有一个更改添加到暂存区域(我们这样做
git add),然后运行以下命令:

  • $ git commit -m “Initial commit.”

这将创建一个新的提交,其中包含来自暂存区域的所有更改(添加hello.txt)。
该-m “Initial commmit”部分是用户自定义的描述,总结了在该提交中所做的更改。
经常提交并总是编写有意义的提交消息,被认为一个开发者的好习惯。

远程仓库

现在我们的提交是本地的 - 它只存在于.git文件夹中。虽然本地存储库本身是有用的,但在大多数情况下,我们都希望共享我们的工作并将其部署到服务器或存储库托管服务。

1.连接到远程存储库 - git remote add

为了上传东西到一个远程的响应,我们首先必须建立一个连接。
为了配合本文,我们的存储库的地址将是https://github.com/Tamic/novate
我们建议放在在GitHub,BitBucket或任何其他服务中创建自己的空存储库。
注册和设置可能需要等待一段时间,但所有服务都提供了很好的分步指南文档来帮助你。

要将我们的本地存储库与GitHub上的存储库连接起来,我们在终端中执行以下行:
文件:

连接到远程服务器

项目可能同时拥有多个远程仓库。为了能够区分他们,我们给他们不同的名字。
传统上git中的主远程仓库被称为origin。

2.上传到服务器 - git push

现在是时候把我们的本地提交转移到服务器上了。
这个过程被称为推送(push),并且每当我们想要更新远程仓库就完成了。
Git命令是这样做的,git push并且需要两个参数 - 远程回购(我们称之为我们的
产地)的名称和推到的分支(master是每个反馈的默认分支)。

1
2
3
4
5
6
7
$ git push origin master

Counting objects: 3, done.
Writing objects: 100%(3/3), 212 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/Tamic/novate.git
* [new branch] master -> master

根据你使用的远程服务,你将需要验证自己的密码和账号。
如果一切正常完成,当你在你的网络浏览器中进入前面创建的远程仓库时,
hello.txt 应该在那里,并且可以打开阅读。

3.克隆仓库 - git clone

此时,大家可以在Github上查看和浏览远程仓库库。他们可以在本地下载,并使用以下git clone命令获得项目的完整工作副本:

  • $ git push origin master

自动创建一个新的本地仓库,并将github版本配置为远程。

4.从服务器获取更改 - git pull

如果你的代码仓库进行了更新,则可以使用下面单个命令下载更改 - git pull:

由于我们克隆的没有 没有其他人提交新的文件或者修改,下载时候提示没有任何变化。

分支

在开发一个新功能时,考虑一个原始项目的副本,称为分支,也被认为开发者的一个好习惯。
分支有他们自己的历史记录,并将他们之间的变化隔离开来,直到你决定把它们合并在一起。
这是由于以下几个原因:

  • 一个已经工作,稳定的代码版本不会被破坏。
  • 许多功能可以由不同的人自己立马并能安全稳定的开发。
  • 开发人员可以在自己的分支上工作,而不会因为别人的工作而改变代码库的风险。
  • 当不确定什么是最好的时候,可以在不同的分支上开发相同特征的多个版本,然后进行比较。

1.创建新的分支机构 - git branch

每个存储库的默认分支称为 主(Master)分支。
要创建更多分支,请使用以下git branch 命令:

  • $ git branch amazing_new_feature

这只是创建了新的分支,在这一点上是完全一样的,我们的主干。

2.切换分支 - git checkout

现在,当我们运行时git branch,我们会看到有两个选项可用:

  • $ git branch
  • amazing_new_feature
  • * master

Master是当前分支,并标有星号。但是,我们想要使用我们的新功能,所以我们需要切换到另一个分支。这是用git checkout命令完成的,需要一个参数 - 要切换到的分支名称。

  • $ git checkout amazing_new_feature

3.合并分支 - git merge

git的“惊人的新功能”将成为另一个名为feature.txt的文本文件。
我们将创建它,add它,并commit。

  • $ git add feature.txt
  • $ git commit -m “新功能完成”。

新功能完成后,我们可以切回到主分支。

  • $ git checkout master

现在,如果我们在文件浏览器中打开我们的项目,我们会注意到feature.txt已经消失了。那是因为我们回到了master分支,而这里feature.txt从来没有被创建过。为了实现这个目标,我们需要将这gitmerge两个分支结合在一起,将在amazing_new_feature中完成的更改应用于项目的主版本。

git合并amazing_new_feature

主分支现在是最新的。awesome_new_feature分支不再需要,可以删除。

  • git branch -d amazing_new_feature