在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题。

Git 系列(四):在 中进行版别回退(git 版本回退)  Linux 开源 第1张

在这篇文章中,你将学到怎么查看项目中的前史版别,怎么进行版别回退,以及怎么创立 Git 分支以便你能够斗胆测验而不会出现问题。

在你的 Git 项目的前史中,你的方位就像是摇滚专辑中的一个片段,由一个被称为 HEAD 的 符号来确认(如磁带录音机或录音播映器的播映头)。要在你的 Git 时刻线上前后移动 HEAD ,需求运用 Git checkout 指令。

git checkout 指令的运用办法有两种。最常见的用处是从一个曾经的提交中康复文件,你也能够整个倒回磁带,切换到另一个分支。

康复一个文件

当你意识到一个原本很好文件被你彻底改乱了。咱们都这么干过:咱们把文件放到一个当地,增加并提交,然后咱们发现它还需求做点***的调整,***这个文件被搞得改头换面了。

要把它康复到***的无缺状况,运用 git checkout 从***的提交(即 HEAD)中康复:

  1. $gitcheckoutHEADfilename

假如你可巧提交了一个过错的版别,你需求找回更早的版别,运用 git log 查看你更早的提交,然后从适宜的提交中找回它:

  1. $gitlog--oneline
  2. 79a4e5fbadtake
  3. f449007Thesecondcommit
  4. 55df4c2Mygreatproject,firstcommit.
  5. $gitcheckout55df4c2filename

现在,曾经的文件康复到了你当时的方位。(任何时候你都能够用 git status 指令查看你的当时状况)由于这个文件改动了,你需求增加这个文件,再进行提交:

  1. $gitaddfilename
  2. $gitcommit-m'restoringfilenamefromfirstcommit.'

运用 git log 验证你所提交的:

  1. $gitlog--oneline
  2. d512580restoringfilenamefromfirstcommit
  3. 79a4e5fbadtake
  4. f449007Thesecondcommit
  5. 55df4c2Mygreatproject,firstcommit.

从本质上讲,你现已倒好了磁带并修正了坏的当地,所以你需求从头录制正确的。

回退时刻线

康复文件的另一种办法是回退整个 Git 项目。这儿运用了分支的思维,这是另一种代替办法。

假如你要回到前史提交,你要将 Git HEAD 回退到曾经的版别才行。这个比如将回到开端的提交处:

  1. $gitlog--oneline
  2. d512580restoringfilenamefromfirstcommit
  3. 79a4e5fbadtake
  4. f449007Thesecondcommit
  5. 55df4c2Mygreatproject,firstcommit.
  6. $gitcheckout55df4c2

当你以这种办法倒回磁带,假如你按下录音键再次开端,就会丢掉曾经的作业。Git 默许假定你不想这样做,所以将 HEAD 从项目中别离出来,能够让你如所需的那样作业,而不会由于偶然的记载而影响之后的作业。

假如你想看看曾经的版别,想要从头做或许测验不同的办法,那么安全一点的办法便是创立一个新的分支。能够将这个进程幻想为测验同一首歌曲的不同版别,或许创立一个混音的。原始的仍然存在,封闭那个分支做你想做的版别吧。

就像记载到一个空白磁带相同,把你的 Git HEAD 指到一个新的分支处:

  1. $gitcheckout-bremix
  2. Switchedtoanewbranch'remix'

现在你现已切换到了另一个分支,在你面前的是一个代替的洁净作业区,预备开端作业吧。

也能够不必改动时刻线来做相同的作业。或许你很想这么做,但切换到一个暂时的作业区仅仅为了测验一些张狂的主意。这在作业中彻底是能够承受的,请看:

  1. $gitstatus
  2. Onbranchmaster
  3. nothingtocommit,workingdirectoryclean
  4. $gitcheckout-bcrazy_idea
  5. Switchedtoanewbranch'crazy_idea'

现在你有一个洁净的作业空间,在这儿你能够完结一些古怪的主意。一旦你完结了,能够保存你的改动,或许丢掉他们,并切换回你的主分支。

若要抛弃你的主意,切换到你的主分支,伪装新分支不存在:

  1. $gitcheckoutmaster

想要持续运用你的张狂的主意,需求把它们拉回到主分支,切换到主分支然后兼并新分支到主分支:

  1. $gitcheckoutmaster
  2. $gitmergecrazy_idea

git 的分支功用很强壮,开发人员在克隆库房后立刻创立一个新分支是很常见的做法;这样,他们一切的作业都在自己的分支上,能够提交并兼并到主分支。Git 是很灵敏的,所以没有“正确”或“过错”的办法(乃至一个主分支也能够与其所属的长途库房别离),但分支易于别离使命和提交奉献。不要太激动,你能够如你所愿的有许多的 Git 分支。彻底自在。

长途协作

到目前为止你现已在自己舒适而私密的家中维护着一个 Git 库房,但怎么与其他人协同作业呢?

有好几种不同的办法来设置 Git 以便让多人能够一起在一个项目上作业,所以首要咱们要克隆库房,你或许现已从或人的 Git 服务器或 GitHub 主页,或在局域网中的同享存储上克隆了一个库房。

作业在私家库房下和同享库房下仅有不同的是你需求把你的改动 push 到他人的库房。咱们把作业的库房称之为本地(local)库房,其他库房称为长途(remote)库房。

当你以读写的办法克隆一个库房时,克隆的库房会承继自被称为 origin 的长途库。你能够看看你的克隆库房的长途库房:

  1. $gitremote--verbose
  2. originseth@example.com:~/myproject.Git(fetch)
  3. originseth@example.com:~/myproject.Git(push)

有一个 origin 长途库十分有用,由于它有异地备份的功用,并答应其他人在该项目上作业。

假如克隆没有承继 origin 长途库,或许假如你挑选今后再增加,能够运用 git remote 指令:

  1. $gitlog--oneline
  2. 79a4e5fbadtake
  3. f449007Thesecondcommit
  4. 55df4c2Mygreatproject,firstcommit.
  5. $gitcheckout55df4c2filename
0

假如你修改了文件,想把它们发到有读写权限的 origin 长途库,运用 git push。***次推送改动,有必要也发送分支信息。不直接在主分支上作业是一个很好的做法,除非你被要求这样做:

  1. $gitlog--oneline
  2. 79a4e5fbadtake
  3. f449007Thesecondcommit
  4. 55df4c2Mygreatproject,firstcommit.
  5. $gitcheckout55df4c2filename
1

它会推送你当时的方位(HEAD)及其存在的分支到长途。当推送过一次后,今后每次推送能够不运用 -u 选项:

  1. $gitlog--oneline
  2. 79a4e5fbadtake
  3. f449007Thesecondcommit
  4. 55df4c2Mygreatproject,firstcommit.
  5. $gitcheckout55df4c2filename
2

兼并分支

当你作业在一个 Git 库房时,你能够兼并恣意测验分支到主分支。当团队协作时,你或许想在将它们兼并到主分支之前查看他们的改动:

  1. $gitlog--oneline
  2. 79a4e5fbadtake
  3. f449007Thesecondcommit
  4. 55df4c2Mygreatproject,firstcommit.
  5. $gitcheckout55df4c2filename
3

假如你正在运用 GitHub 或 GitLab 以及相似的东西,这个进程是不同的。但克隆项目并把它作为你自己的库房都是相似的。你能够在本地作业,将改动提交到你的 GitHub 或 GitLab 帐户,而不必其它人的答应,由于这些库是你自己的。

假如你想要让你克隆的库房承受你的改动,需求创立了一个拉取恳求(pull request),它运用 Web 服务的后端发送补丁到真实的具有者,并答应他们检查和拉取你的改动。

克隆一个项目通常是在 Web 服务端完结的,它和运用 Git 指令来办理项目是相似的,乃至推送的进程也是。然后它返回到 Web 服务翻开一个拉取恳求,作业就完结了。

下一部分咱们将整合一些有用的插件到 Git 中来帮你轻松的完结日常作业。

转载请说明出处
知优网 » Git 系列(四):在 Git 中进行版别回退(git 版本回退)

发表评论

您需要后才能发表评论