我的github

Git 是世界上最好用的代码版本控制工具。

 

https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650760794&idx=1&sn=5e7fdd77be6e5f09f3b84febda384d8f&chksm=871aa224b06d2b32a8ca9574f2386b3293acac8fdc7f243bc19df8067ab9f150eda3807e4255&mpshare=1&scene=23&srcid=0421Yog8Zsewg6MWHL9VGoD8#rd

 

git mapnik python

 

git submodule使用以及注意事项:https://blog.csdn.net/xuanwolanxue/article/details/80609986

>>更多:https://blog.csdn.net/nmj2008/article/details/113802346

 

 

Chapter 4:深入Git(《Beginning Git and Github》)

4.1 Ignoring files
不是工作目录中的所有内容都应该被Git跟踪。有些文件(配置、密码、错误代码)通常不会被作者或开发人员跟踪。

这些文件(或目录)列在一个名为“.gitignore”的简单文件中。注意“gitignore”前面的句点;这很重要。要忽略文件,请创建一个名为.gitignore的文件,并列出其中要忽略的文件或文件夹。

让我们回到上一章的存储库,TODO列表。假设您想要包含一个名为专用.txt. 首先必须使用您最喜欢的文本编辑器创建.gitinore文件,然后编写PRIVATE。如图4-1所示。

如果您随后创建并修改专用.txt文件(如图4-2所示),如果您检查状态,Git不会考虑它

让我们检查一下状态。

$ git status

您将得到类似的结果,如图4-3所示

 

 如图4-3所示,专用.txt未跟踪。您还可以看到.gitignore文件被跟踪;因此,您必须在修改它之后添加并提交它。

$ git add .gitignore
$ git commit

像往常一样,暂存一个文件,然后提交项目,将产生一条确认消息,总结所做的更改(如图4-4所示)。

记住.gitignore全局文件应该放在存储库的根目录下。如果你把它放在一个目录中,只有该目录中匹配的文件会被忽略。一般来说,在多个目录中有多个.gitignore文件被认为是不好的做法,除非您的项目非常庞大。更喜欢将它们列在存储库根目录下的单个.gitignore文件中

您可能会问自己在使用Git时要忽略哪种类型的文件。好吧,经验法则是忽略项目生成的所有文件。例如,如果您的项目是软件源代码,则应忽略已编译的输出(可执行或已翻译的文件)。临时文件和日志以及大型库(节点模块)也应该被忽略。别忘了排除所有个人配置和文本编辑器的临时文件。

.gitinore文件不仅忽略按名称列出的文件;还可以忽略与描述匹配的目录和文件。您将在表4-1中找到一个方便的提示,提示您可以使用的所有模板。

这些是与.git一起使用的最常见的行。还有其他一些,但它们只在非常特定的情况下使用,几乎从未在普通项目中使用。如果您使用的是计算机语言或框架,可以转到https://github.com/github/gitinore以获取应使用的.gitinore文件的模板。

但是,如果要忽略除一个描述以外的所有与描述匹配的文件,该怎么办?好吧,您可以告诉Git忽略所有文件,然后立即创建一个例外。要从忽略列表中排除文件,请使用“!”!。“每个示例,如果要忽略除输出.exe,您将像图4-5中那样编写.gitignore。

注意行的顺序。规则之后有例外!

不过,这个异常标记只适用于描述文件名的行。不能将其用于忽略目录的行。如图4-6所示的.gitinore文件将不起作用

 

 4.2 Checking logs and history

如果您遵循这些练习(您应该这样做),或者开始在您自己的项目中使用Git,那么现在您就遇到了一个小问题,我保证用Git可以很容易地解决这个问题:如何查阅历史日志。

这是Git最常用的特性之一,也是最简单的Git命令之一:gitlog

$ git log

试试看!打开存储库并运行命令。您应该看到如图4-8所示的视图。

 提交日志将列出(从最新到最旧)您或其他人提交的所有快照。它还包括,对于每个提交

•名称(唯一,通过哈希获得)
•作者
•日期
•描述

由于提交名称太长,我们将只使用前五个字母作为名称。这对下一节很重要

如果提交历史很长,可以使用键盘:

•向前或向后一行:上下键或j和k键
•向前或向后一个窗口:f和b
•日志末尾:G

•日志开头:g
•获得帮助:h
•退出日志:q

有许多参数可以与git log一起使用;表4-2展示了这些参数。

 

4.3 Viewing previous versions
既然您知道了如何检查历史记录和提交日志,现在就应该先检查文件以查看更改了哪些文件。

还记得每次提交时创建的长名称吗?我们将使用它们在提交或快照之间导航。要检查文件在特定快照上的状态,只需知道其名称即可。要知道每个提交的名称,最好的方法是检查历史日志,如图4-9所示。

要显示和了解对项目所做的更改,只需使用“gitshow”命令,后跟提交的名称。你甚至不需要写全名,只需要写前七个字母。

$ git show <name>

如您所见,提交以非常详细的方式显示。您将看到所选提交与上一个提交之间的区别。添加部分以绿色显示,删除部分以红色显示。您可以使用“gitshow”命令显示任何提交的详细信息。

 

 4.4 Reviewing the current changes

检查以前的版本很好,但是如果您只想检查您刚才所做的更改呢?检查上次提交和当前工作目录之间的差异是Git的一个基本特性。你会经常用的!检查差异的命令很简单:git diff。

$ git diff

修改目录中的一个或多个文件,然后执行命令。您将得到如图4-11所示的结果,这与上一节中gitshow命令的结果非常相似。它们实际上是相同的视图,因为显示的信息是相同的。

大多数情况下,您只需要检查对单个文件所做的更改,而不需要检查整个项目。您可以将文件名作为参数传递,以查看其与上次提交的差异。

$ git diff TODO.txt

要记住的主要一点是git diff检查对工作目录中的文件所做的更改;它不检查暂存文件!要检查对暂存文件所做的更改,必须使用参数“--staged”。

$ git diff --staged

在提交项目之前,您应该始终检查暂存文件中的差异,以便进行最终检查。我知道有一天你会忘记这样做,所以请转到下一章学习如何撤消或修改你的提交。

这是本章的结尾,我们学到了很多东西。在进入下一章之前,请确保您熟悉以下功能:

•忽略文件
•检查历史记录
•审查本地和阶段性变更

 

CHAPTER 5:提交
上一章向您介绍了Git的一些基本特性。您应该知道如何检查历史记录日志并查看对当前版本所做的更改。但是Git提交是一块很难啃的骨头,所以我们将在本章中更多地讨论它们。首先,我们将(再次)探讨Git的内部工作及其术语。然后,我们将学习如何查看和检查以前的版本。我们走!

5.1 The three states of Git(Git的三种状态)

在详细讨论提交之前,我们必须回到基础,重新学习Git的工作原理。您肯定记得文件可以找到自己的三种状态。如果没有,请不要跳过本章;这对于使用Git所做的一切都是必不可少的。如果你还记得,也不要跳过,因为我花了很多时间写。

正如您在上一章所看到的,Git并不是跟踪所有的文件;有些文件被忽略了(被.gitinore文件忽略)。还有一些文件没有被忽略,但是还没有被Git跟踪。它们是新创建的文件,从未作为快照(提交)的一部分。

跟踪的文件可以有三种状态:
• 修改:您更改了文件。
• Staged:您更改了文件并将其准备为快照。
• 提交:您拍摄了整个项目的快照,文件就在其中。

记住:Git不跟踪更改,它跟踪快照。每次提交时,都会保存整个项目的状态,而不仅仅是所做的小更改。

书呆子事实:Git很快,因为你总是在项目的最后一个状态下工作。当您想查看以前的提交时,它只会显示项目在该特定时间的状态。许多VCS将所做的每个更改存储到一个文件中,当您想返回到以前的状态时,它们会以相反的方式重放更改。当项目变大时,这会导致许多问题或速度和内存。Git的思维方式不是创建了超大型数据库吗?不,因为当您拍摄快照并且文件没有更改时,它不会再次存储;而是使用对文件的引用。

让我们再回到这三种状态,看看它们之间的关系:

•你在工作目录上工作。它只是您在初始化存储库之前创建的目录。在那里你可以阅读和编辑你的文件。

•暂存区是您在拍摄整个项目快照之前放置更改的文件的地方。如果不暂存更改的文件,则无法拍摄快照。快照中将只考虑暂存文件(和未更改的文件)。未暂存的文件(跟踪或未跟踪)和忽略的文件将保持相同的状态。

•数据库或.git目录存储您拍摄的每个快照。这些快照称为提交。

请记住:转移关注点仅限于您选择的已更改文件,而提交关注点则是整个项目。先暂存一个文件,然后提交项目。

5.2 Navigating between versions
很多时候,您不仅想知道项目中发生了什么变化,而且还想查看它处于什么状态,查看您拍摄的快照。使用Git很容易。

当您想将项目的前一个状态带到工作目录时,我们必须用“git checkout”签出commit。因为这会更改工作目录上的文件,所以您必须确保那里没有任何未暂存的文件。未跟踪的文件很好,因为Git还没有跟踪它们的状态。

为了检查项目的快照,我们使用“git checkout”命令并将提交名称作为参数传递。

$ git checkout <name>

让我们试试!在文本编辑器中打开当前项目并记下其内容。现在检查一下前面的提交,如图5-1所示。

警告:如果工作目录不干净,则不能签出任何其他提交!确保在切换快照之前提交更改。

 在签出以前的提交时,请注意不要更改任何内容。就像电影里一样,改变过去是一个非常糟糕的主意!

如果您检查您的文本编辑器,您会注意到项目现在就像您拍摄快照时一样。这就是Git的优点。你拍下的照片不会丢失。

在不同的提交之间切换时,我们需要一种方法来知道我们在哪个“头”上。当前的头(正在签出的头)称为“头”。

就这样!头是对提交的引用(存储库中可以有多个头),指向当前签出的提交的头称为头。

但如何回到正常的,当前的工作目录?由于我们没有对存储库进行任何大的更改,因此返回工作目录只是签出我们拥有的唯一分支。按照惯例,这个分支叫做“主分支”。

$ git checkout master

试试看!记住时间旅行的两条黄金定律:
•只有在当前文件干净的情况下才能返回时间(工作目录中没有未标记的内容)。

•不要改变过去(除非你有更多的经验)。

在不同版本之间导航后,不要忘记签出当前分支(主分支)。

5.3 Undo a commit
有时候,你stage和提交文件,但改变你的想法。每个人都会这样。但是使用传统方法(没有版本控制),很难回滚更改,特别是如果更改是很久以前的。对于Git,它只是一个命令:Git revert。

为什么不直接删除提交?因为上节的时间旅行法则:永远不要改变过去。无论发生什么样的变化,为了历史的缘故,都必须如此;改变过去发生的事情是非常危险和违反直觉的。相反,您将使用git revert创建一个新的提交,该提交包含与您尝试撤消的提交完全相反的内容。

因此,撤消提交只是提交其完全相反的内容。就这么简单!要使用它,必须将要撤消的提交的名称作为参数传递。

$ git revert <commit name>

您可以恢复任何提交;只需确保在干净的工作目录上工作即可。因此,在恢复提交之前,不要忘记暂存和提交文件。让我们试试吧!

首先,确保工作目录是干净的,如图5-2所示。

很完美。现在我们知道工作目录是干净的了,现在是时候检查历史记录以知道要撤消哪个提交了。我们应该得到如图5-3所示的结果。

注意:如果您不喜欢提交历史记录的显示方式,可以传递“--oneline”参数以减少显示的信息。如图5-4所示。

让我们恢复第三次提交!我们只使用git revert后跟commit名称。

$ git revert 5f57824

由于git revert只创建包含相反更改的新提交,因此过程的其余部分与任何新提交相同。如图5-5所示,您将被要求描述您的新提交。我建议始终保留默认的提交描述,因为这样很容易识别。

保存提交描述(与所有提交一样)后,将显示快照内容的摘要。图5-6显示了运行命令并保存提交描述后得到的结果。

如您所见,使用Git撤消更改非常容易。要记住的是git revert只会创建一个包含相反更改的新提交。这意味着您可以还原还原!还原还原只会重新应用原始提交,两个“还原”将相互取消。但是,提交将保留在您的历史日志中,因为您无法更改过去。

注意:实际上,你可以改变过去。但永远不要这样做。这是个很坏的主意,只会给你带来更多的麻烦。

5.4 Modifying a commit
正如我在上一章中承诺的那样,您将在本章中学习如何修改提交。当您忘记暂存文件或要更改提交消息时,将使用此选项。这不应该用来修改很多文件,因为这是违反直觉的。下一章将详细讨论何时何地使用此功能。我再说一遍:永远不要试图改变过去。

要修改提交,必须使用git commit命令,但要使用“--amend”作为参数。它会像普通的提交一样打开默认的文本编辑器,但是已经有了暂存文件和提交消息。

$ git commit --amend

然后只需保存并关闭文本编辑器,就像每次提交一样。我使用的“modify”这个词有点误导,因为您并不是在修改提交;而是在创建一个新的提交并替换当前的提交。所以,从现在开始,我会用“修正”这个词

修改提交会占用暂存区域中的所有内容,并使用它进行新的提交。因此,如果您想在提交中添加一个新文件或从中删除一个文件,您可以随意暂存和取消暂存它们。提醒:要解除文件的暂存,必须使用git reset HEAD<file>。这里有一个小例子。

让我们再次使用TODO应用程序。编辑现有文件;然后创建两个名为文件nottocommit.txt以及文件遗忘.txt如图5-7所示。

可以通过执行git status命令来检查项目的当前状态:

$ git status

根据之前添加到项目中的文件数量,结果可能略有不同,但仍然类似于图5-8。

 

接下来我们要做的是将文件转移到提交的一部分。添加更改的文件并文件nottocommit.txt.

$ git add TODO.txt DONE.txt filenottocommit.txt

从上一章中可以看出,在提交之前,您应该始终使用“git diff--staged”检查您所暂存的内容。但让我们假装你忘记检查并立即提交。

$ git commit

即使这样,您也会看到提交消息屏幕,其中概述了要提交的更改,如图5-9所示。

如您所见,要提交的更改和未跟踪的文件将被概述并突出显示。很难错过它们,但是让我们假装并编写一个简单的提交消息,保存,然后关闭编辑器。您将得到图5-10所示的常规摘要。

现在您已经阅读了提交摘要,您注意到您提交了错误的文件,并且忘记了提交另一个文件。

 首先,应该使用git reset从项目中删除最后一次提交。我们将使用“--soft”选项,以便所做的编辑保留在工作目录中。HEAD~1表示前一个commit,而HEAD表示是对当前commit的引用。

$ git reset --soft HEAD~1

在此之后,您可以使用git reset再次解除文件的暂存:

$ git reset HEAD filenottocommit.txt

通过查看项目的当前状态,检查命令是否按预期工作。

$ git status

您将得到如图5-11所示的结果。

如你所见,文件nottocommit.txt现在没有追踪,因为我们把它从集结区移走了。当然,文件遗忘.txt也没有追踪,因为我们没有上演。仅限完成.txt因为我们在提交后还没碰过它,所以它还在暂存区。

小心:使用重置命令时要小心。这很危险。一定要仔细检查你写的东西。

然后stage正确的。

$ git add fileforgotten.txt

现在,您已经暂存了正确的文件,可以提交项目了。

$ git commit

在提交消息中输入“语法错误”作为标记,这样您就继续Git的另一个特性。

5.5 Amending a commit
对于诸如提交消息中的错误之类的简单错误,不需要修改整个提交。你只需要修补一下。让我们试试我们的项目!

$ git commit --amend

修正过程看起来就像一个普通的提交,但是提交消息已经被写入,如图5-12所示。

您可以随意更改提交消息,然后像往常一样保存并关闭编辑器。

就这么简单!查看新提交的名称,并将其与旧提交进行比较。你会注意到它们是不同的。这是因为提交名称是快照中信息的散列。所以项目的不同状态会导致不同的名称。

关于修改提交的临别赠言:不要滥用它!是的,在编写代码时出错是不理想的,而且大多数情况下我们希望立即纠正错误。但是错误也能帮助我们变得更好,而记录错误是一个很好的学习方法。

 

CHAPTER 6:Git最佳实践
上一章是本书最重要的一章。每次你对承诺有疑问的时候,一定要回到过去。阅读之后,您应该能够毫无问题地制作、查看和修改项目快照。现在您已经了解了Git的基本特性,是时候学习最佳实践了,以使您(和您的队友)的生活更轻松。这些是我第一次使用Git时希望知道的东西。我们将介绍提交消息、Git的注意事项,以及初学者最常见的错误列表。最后,我们将提醒大家Git是如何工作的。

 

>>前三章:https://blog.csdn.net/nmj2008/article/details/113802346

posted on 2019-04-21 22:33  XiaoNiuFeiTian  阅读(213)  评论(0编辑  收藏  举报