连 Git 命令都不会? 还做什么程序员

栏目: 编程工具 · 发布时间: 5年前

内容简介:初学者常常被Git是一个命令行实用程序的集合,它会跟踪和记录文件中的更改(通常是源代码,但是可以跟踪任何你想要的文件)。有了它,你可以恢复项目的旧版本,比较,分析,合并更改等操作。

点击上方“ 开发者技术前线 ”,选择“星标”

每天 13.21 在看 | 真爱

原创:开发者技术前线  |  作者: Tamic

连 Git 命令都不会? 还做什么程序员

Git近年来受到欢迎。版本代码控制系统被 Linux 等巨大的开源项目所使用,成千上万的贡献者,各种规模的团队,独立开发者,甚至是学生。

初学者常常被 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 config --global user.email myEmail@example.com

我们在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应该返回以下内容:

$ 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 status应该返回以前的不同输出。

我们的文件已准备好提交。

状态消息还提示我们暂存区中的文件有什么变化 - 在这种情况下是

新文件,但是可以 修改或 删除它,这取决于自上次文件发生了什么 git add

6.提交 - git commit

一个提交表示在给定的时间点我们的仓库的状态。 这就像一个日志记录,我们可以回顾一下,看看我们拿什么。

要创建一个新的提交,我们需要至少有一个更改添加到暂存区域(我们这样做

git add ),然后运行以下命令:

这将创建一个新的提交,其中包含来自暂存区域的所有更改(添加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是每个反馈的默认分支)。

根据你使用的远程服务,你将需要验证自己的密码和账号。

如果一切正常完成,当你在你的网络浏览器中进入前面创建的远程仓库时,

hello.txt 应该在那里,并且可以打开阅读。

3.克隆仓库 - git clone

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

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

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

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

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

分支

在开发一个新功能时,考虑一个原始项目的副本,称为 分支 ,也被认为开发者的一个好习惯

分支有他们自己的历史记录,并将他们之间的变化隔离开来,直到你决定把它们合并在一起。

这是由于以下几个原因:

  • 一个已经工作,稳定的代码版本不会被破坏。

  • 许多功能可以由不同的人自己立马并能安全稳定的开发。

  • 开发人员可以在自己的分支上工作,而不会因为别人的工作而改变代码库的风险。

  • 当不确定什么是最好的时候,可以在不同的分支上开发相同特征的多个版本,然后进行比较。

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

每个存储库的默认分支称为 主(Master)分支

要创建更多分支,请使用以下 git branch <name> 命令:

$ git branch amazing_new_feature

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

2.切换分支 - git checkout

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

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

从来没有被创建过。为了实现这个目标,我们需要将这git merge两个分支结合在一起,将在

amazing_new_feature中完成的更改应用于项目的主版本。

git合并amazing_new_feature

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

git branch -d amazing_new_feature

高级操作

在本文的最后一节中,我将介绍一些更高级的技术,这些技术很可能在你工作中派上用场。

1.检查提交之间的差异

每个提交都以数字和符号的字符串形式存在唯一的ID。

要查看所有提交及其ID的列表,我们可以使用 git log

正如你所看到的,ID是很长的,但是和它们一起工作时,没有必要复制整个东西 - 前几个符号通常就足够了。

要查看提交中的新增内容,我们可以运行 git show [commit]

要查看任何两个提交之间的区别,我们可以使用 git diff [commit-from] .. [commit-to]语法:

我们已经比较了第一次提交和最后一次提交,所以我们看到了所有的改变。

通常使用这个 git difftool 命令可以更容易地完成这个任务,这个命令可以让一个图形化的客户端显示所有的差异。

2.将文件恢复到以前的版本

Git允许我们将任何选定的文件返回到某个提交中的方式。 这是通过 git checkout

我们以前用来切换分支 的熟悉的命令完成的,但是也可以用来在提交之间切换(在Git中一个命令用于多个看起来不相关的任务是很常见的)。

在下面的例子中,我们将采用 hello.txt,并将自从初始提交以来所做的一切都撤销。

要做到这一点,我们必须提供我们想要返回的提交的id,以及我们文件的完整路径。

$ git checkout 09bd8cc1 hello.txt

3.修复提交

如果你注意到你在提交信息中输入了一个错字,或者你忘记了添加一个文件,并且在提交之后你看到了,你可以很容易地解决这个问题 git commit --amend 。这将添加从上次提交到暂存区域的所有内容,并尝试进行新的提交。这给你一个机会来解决你的提交信息或添加更多的文件到临时区域。

对于不在上次提交中的更复杂的修复(或者如果您已经推送了更改),则必须使用 git revert 。 这将采取提交引入的所有更改,将其回滚,并创建一个与此相反的新提交。

最新的提交可以被HEAD别名访问。

$ git revert HEAD

对于其他提交,最好使用一个id。

$ git revert b10cc123

当恢复较旧的提交时,请记住合并冲突很可能会出现。

当一个文件被另一个更近的提交改变时,会发生这种情况,现在Git找不到正确的行来恢复,因为它们不在那里了。

4.解决合并后的冲突

除了前面所描述的情况之外,在合并分支或者牵扯其他人的工作时经常出现冲突。

有时候,冲突是由git自动处理的,但有时候处理这些冲突的人必须决定(通常是精选)哪些代码保留,什么被删除。

我们来看一个例子,我会合并两个叫做john_branch和tim_branch的分支。

小张和小李都在同一个文件中写入一个显示数组中所有元素的函数。

小李喜欢forEach

他们都在各自的分支上提交代码。

现在,如果他们尝试合并两个分支,他们将看到以下错误消息:

Git无法自动合并分支,所以现在由开发人员手动解决冲突。

如果他们打开冲突所在的文件,他们会看到Git在冲突的行上插入了一个标记。

在=====之上,我们有当前的HEAD提交,并且在冲突之下。

这样我们就可以清楚地看到差异,并决定哪个版本更好,或者一起写一个新版本。

在这种情况下,我们去找后者,重写整个事情,删除标记让Git知道我们已经完成了。

当所有东西都被设置好后,就必须完成一个合并提交来完成这个过程。

正如你所看到的,这个过程非常烦人,在大型项目中可能会遇到很大的困难。

大多数开发人员倾向于在GUI客户端 (下载https://git-scm.com/download/gui/linux)

的帮助下解决冲突,这使事情变得更容易。

运行图形客户端使用git mergetool。

5.设置.gitignore

在大多数项目中都有我们不想提交的文件或整个文件夹。

我们可以git add -A 通过创建.gitignore文件来确保它们不会被意外地包含在我们

的内容中:

  1. 手动创建一个名为.gitignore的文本文件,并将其保存到项目目录中。

  2. 在里面,列出要忽略的文件/目录的名称,每个都在一个新的行上。

  3. .gitignore本身必须被添加,提交和推送,就像项目中的任何其他文件一样。

很好的文件被忽略的例子是:

  • 日志文件

  • 任务运行者建立

  • node.js项目中的node_modules文件夹

  • 由NetBeans和IntelliJ等IDE创建的文件夹

  • 个人开发者笔记

禁止上述所有内容的.gitignore将如下所示:

在某些行末尾的斜线表示这是一个文件夹,我们忽略了递归中的所有内容。 星号通常用作通配符。

写在最后

Git相当复杂,并提供更多的功能和技巧。 如果你想了解更多

推荐的学习资源:

  • 官方的Git文档,包括一整本书和视频课程 - 在这里 (https://git-scm.com/doc)。

  • 让git正确 - Atlassian收集的教程和文章 - 在这里 (https://www.atlassian.com/git/)。

  • 一个GUI客户端列表 - 在这里 (https://www.git-scm.com/downloads/guis)。

  • Git备忘单(PDF) - 这里

    https://services.github.com/on-demand/downloads/github-git-cheat-sheet.pdf

  • 生成.gitignore文件的在线工具 - 在这里 。 https://www.gitignore.io/

喜欢就点个在看了!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数字化生存

数字化生存

尼葛洛庞帝 / 胡泳 等 / 海南出版社 / 1997-2 / 16.80元

《数字化生存》可以说是二十世纪信息技术及理念发展的圣经,此书的流行和传播对上个世纪信息时代的启蒙、发展产生了深远的影响,本书深入浅出地讲解了信息技术的基本概念、趋势和应用、巨大的价值和数字时代的宏伟蓝图,阐明了信息技术、互联网对时代和人们生活的影响和价值。作者尼葛洛庞帝成为了信息技术投资和趋势分析领域的教父,他的知名度和因此带来的无形价值不可估量。一起来看看 《数字化生存》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换