在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题。
在这篇文章中,你将学到怎么查看项目中的前史版别,怎么进行版别回退,以及怎么创立 Git 分支以便你能够斗胆测验而不会出现问题。
在你的 Git 项目的前史中,你的方位就像是摇滚专辑中的一个片段,由一个被称为 HEAD 的 符号来确认(如磁带录音机或录音播映器的播映头)。要在你的 Git 时刻线上前后移动 HEAD ,需求运用 Git checkout 指令。
git checkout 指令的运用办法有两种。最常见的用处是从一个曾经的提交中康复文件,你也能够整个倒回磁带,切换到另一个分支。
康复一个文件
当你意识到一个原本很好文件被你彻底改乱了。咱们都这么干过:咱们把文件放到一个当地,增加并提交,然后咱们发现它还需求做点***的调整,***这个文件被搞得改头换面了。
要把它康复到***的无缺状况,运用 git checkout 从***的提交(即 HEAD)中康复:
- $gitcheckoutHEADfilename
假如你可巧提交了一个过错的版别,你需求找回更早的版别,运用 git log 查看你更早的提交,然后从适宜的提交中找回它:
- $gitlog--oneline
- 79a4e5fbadtake
- f449007Thesecondcommit
- 55df4c2Mygreatproject,firstcommit.
- $gitcheckout55df4c2filename
现在,曾经的文件康复到了你当时的方位。(任何时候你都能够用 git status 指令查看你的当时状况)由于这个文件改动了,你需求增加这个文件,再进行提交:
- $gitaddfilename
- $gitcommit-m'restoringfilenamefromfirstcommit.'
运用 git log 验证你所提交的:
- $gitlog--oneline
- d512580restoringfilenamefromfirstcommit
- 79a4e5fbadtake
- f449007Thesecondcommit
- 55df4c2Mygreatproject,firstcommit.
从本质上讲,你现已倒好了磁带并修正了坏的当地,所以你需求从头录制正确的。
回退时刻线
康复文件的另一种办法是回退整个 Git 项目。这儿运用了分支的思维,这是另一种代替办法。
假如你要回到前史提交,你要将 Git HEAD 回退到曾经的版别才行。这个比如将回到开端的提交处:
- $gitlog--oneline
- d512580restoringfilenamefromfirstcommit
- 79a4e5fbadtake
- f449007Thesecondcommit
- 55df4c2Mygreatproject,firstcommit.
- $gitcheckout55df4c2
当你以这种办法倒回磁带,假如你按下录音键再次开端,就会丢掉曾经的作业。Git 默许假定你不想这样做,所以将 HEAD 从项目中别离出来,能够让你如所需的那样作业,而不会由于偶然的记载而影响之后的作业。
假如你想看看曾经的版别,想要从头做或许测验不同的办法,那么安全一点的办法便是创立一个新的分支。能够将这个进程幻想为测验同一首歌曲的不同版别,或许创立一个混音的。原始的仍然存在,封闭那个分支做你想做的版别吧。
就像记载到一个空白磁带相同,把你的 Git HEAD 指到一个新的分支处:
- $gitcheckout-bremix
- Switchedtoanewbranch'remix'
现在你现已切换到了另一个分支,在你面前的是一个代替的洁净作业区,预备开端作业吧。
也能够不必改动时刻线来做相同的作业。或许你很想这么做,但切换到一个暂时的作业区仅仅为了测验一些张狂的主意。这在作业中彻底是能够承受的,请看:
- $gitstatus
- Onbranchmaster
- nothingtocommit,workingdirectoryclean
- $gitcheckout-bcrazy_idea
- Switchedtoanewbranch'crazy_idea'
现在你有一个洁净的作业空间,在这儿你能够完结一些古怪的主意。一旦你完结了,能够保存你的改动,或许丢掉他们,并切换回你的主分支。
若要抛弃你的主意,切换到你的主分支,伪装新分支不存在:
- $gitcheckoutmaster
想要持续运用你的张狂的主意,需求把它们拉回到主分支,切换到主分支然后兼并新分支到主分支:
- $gitcheckoutmaster
- $gitmergecrazy_idea
git 的分支功用很强壮,开发人员在克隆库房后立刻创立一个新分支是很常见的做法;这样,他们一切的作业都在自己的分支上,能够提交并兼并到主分支。Git 是很灵敏的,所以没有“正确”或“过错”的办法(乃至一个主分支也能够与其所属的长途库房别离),但分支易于别离使命和提交奉献。不要太激动,你能够如你所愿的有许多的 Git 分支。彻底自在。
长途协作
到目前为止你现已在自己舒适而私密的家中维护着一个 Git 库房,但怎么与其他人协同作业呢?
有好几种不同的办法来设置 Git 以便让多人能够一起在一个项目上作业,所以首要咱们要克隆库房,你或许现已从或人的 Git 服务器或 GitHub 主页,或在局域网中的同享存储上克隆了一个库房。
作业在私家库房下和同享库房下仅有不同的是你需求把你的改动 push 到他人的库房。咱们把作业的库房称之为本地(local)库房,其他库房称为长途(remote)库房。
当你以读写的办法克隆一个库房时,克隆的库房会承继自被称为 origin 的长途库。你能够看看你的克隆库房的长途库房:
- $gitremote--verbose
- originseth@example.com:~/myproject.Git(fetch)
- originseth@example.com:~/myproject.Git(push)
有一个 origin 长途库十分有用,由于它有异地备份的功用,并答应其他人在该项目上作业。
假如克隆没有承继 origin 长途库,或许假如你挑选今后再增加,能够运用 git remote 指令:
0
- $gitlog--oneline
- 79a4e5fbadtake
- f449007Thesecondcommit
- 55df4c2Mygreatproject,firstcommit.
- $gitcheckout55df4c2filename
假如你修改了文件,想把它们发到有读写权限的 origin 长途库,运用 git push。***次推送改动,有必要也发送分支信息。不直接在主分支上作业是一个很好的做法,除非你被要求这样做:
1
- $gitlog--oneline
- 79a4e5fbadtake
- f449007Thesecondcommit
- 55df4c2Mygreatproject,firstcommit.
- $gitcheckout55df4c2filename
它会推送你当时的方位(HEAD)及其存在的分支到长途。当推送过一次后,今后每次推送能够不运用 -u 选项:
2
- $gitlog--oneline
- 79a4e5fbadtake
- f449007Thesecondcommit
- 55df4c2Mygreatproject,firstcommit.
- $gitcheckout55df4c2filename
兼并分支
当你作业在一个 Git 库房时,你能够兼并恣意测验分支到主分支。当团队协作时,你或许想在将它们兼并到主分支之前查看他们的改动:
3
- $gitlog--oneline
- 79a4e5fbadtake
- f449007Thesecondcommit
- 55df4c2Mygreatproject,firstcommit.
- $gitcheckout55df4c2filename
假如你正在运用 GitHub 或 GitLab 以及相似的东西,这个进程是不同的。但克隆项目并把它作为你自己的库房都是相似的。你能够在本地作业,将改动提交到你的 GitHub 或 GitLab 帐户,而不必其它人的答应,由于这些库是你自己的。
假如你想要让你克隆的库房承受你的改动,需求创立了一个拉取恳求(pull request),它运用 Web 服务的后端发送补丁到真实的具有者,并答应他们检查和拉取你的改动。
克隆一个项目通常是在 Web 服务端完结的,它和运用 Git 指令来办理项目是相似的,乃至推送的进程也是。然后它返回到 Web 服务翻开一个拉取恳求,作业就完结了。
下一部分咱们将整合一些有用的插件到 Git 中来帮你轻松的完结日常作业。
知优网 » Git 系列(四):在 Git 中进行版别回退(git 版本回退)