电脑频道 手机频道
网络技能 路由器
电脑零碎 电脑蓝屏
游戏攻略 明星八卦
钱汇娱乐网 最新更新
首页 > 苹果MAC>注释 通告: 为呼应国度净网举动,局部内容曾经删除,感激网友了解。

_Git中一些打消和规复下令的运用小结_

【2015-12-20 08:24:45】 泉源:网络 作者:福州电脑之家 批评:

打消一个“已地下”的改动

场景: 你曾经实行了 git push, 把你的修正发送到了 GitHub,如今你认识到这些 commit 的此中一个是有题目的,你需求打消那一个 commit.

办法:
复制代码代码如下:git revert <SHA>

原理: git revert 会发生一个新的 commit,它和指定 SHA 对应的 commit 是相反的(或许说是反转的)。假如原先的 commit 是“物质”,新的 commit 便是“反物质” — 任何从原先的 commit 里删除的内容会在新的 commit 里被加归去,任安在原先的 commit 里参加的内容会在新的 commit  里被删除。

这是 Git 最平安、最根本的打消场景,由于它并不会改动汗青 — 以是你如今可以  git push 新的“反转” commit 来抵消你错误提交的 commit。

打消“当地的”修正

场景: 一只猫从键盘上走过,有意中保管了修正,然后毁坏了编辑器。不外,你还没有 commit 这些修正。你想要规复被修正文件里的一切内容 — 就像前次 commit 的时分如出一辙。

办法:
复制代码代码如下:git checkout -- <bad filename>

原理: git checkout 会把任务目次里的文件修正到 Git 之前记载的某个形态。你可以提供一个你想前往的分支名或特定 SHA ,或许在缺省状况下,Git 会以为你盼望 checkout 的是 HEAD,以后 checkout 分支的最初一次 commit。

记着:你用这种办法“打消”的任何修正真的会完全消逝。由于它们历来没有被提交过,以是之后 Git 也无法协助我们规复它们。你要确保本人理解你在这个操纵里抛弃的工具是什么!(大概可以先应用 git diff 确认一下)
Git堆栈打消至前一次提交时的形态


复制代码代码如下:$ git checkout <SHA>
“”是你想检查的提交拥有的哈希值Hash Code中前8至10个字符。 这个下令会使<HEAD>指针离开detach,可以让你在不检出check out任何分支的状况下检查代码——离开HEAD并不像听上去那么可骇。假如你想在这种状况下提交修正,你可以经过创立新的分支来完成:


复制代码代码如下:$ git checkout -b <SHA>
要想回到以后的任务进度,只需求检出check out你之前地点的分支即可。


打消近来一次代码提交
偶然候你能够会不警惕提交了错误的文件或一开端就脱漏了某些工具。上面这三步操纵可以协助你处理这个题目。

复制代码代码如下:
$ git reset --soft HEAD~1
# 对任务文件停止须要的变动
$ git add -A .
$ git commit -c ORIG_HEAD

你实行第一个下令时,Git会将HEAD指针后移到此前的一次提交,之后你才干挪动文件或作须要的修正。

然后你就可以添加一切的修正,并且当你实行最初的下令时,Git会翻开你的默许文本编辑器,此中会包括上一次提交时的信息。假如情愿的话,你可以修正提交信息,或许你也可以在最初的下令中运用-C而不是-c,来跳过这一步。


打消兼并Merge
要想打消兼并,你能够必需要运用规复下令HARD RESET回到上一次提交的形态。“兼并”所做的任务根本上便是重置索引,更新working tree(任务树)中的差别文件,即以后提交()代码中与HEAD游标所指向代码之间的差别文件;但是兼并会保存索引与working tree之间的差别局部(比方那些没有被追踪的修正)。

复制代码代码如下:
$ git checkout -b <SHA>

在打消“当地修正”之后再规复

场景: 你提交了几个 commit,然后用 git reset --hard 打消了这些修正(见上一段),接着你又认识到:你盼望复原这些修正!

办法:
复制代码代码如下:git reflog 和
复制代码代码如下:git reset或
复制代码代码如下: git checkout

原理: git reflog 关于规复项目汗青是一个超棒的资源。你可以规复简直 任何工具 — 任何你 commit 过的工具 — 只需经过 reflog。

你能够曾经熟习了 git log 下令,它会表现 commit 的列表。 git reflog 也是相似的,不外它表现的是一个 HEAD 发作改动的工夫列表.

一些留意事变:

它触及的只是 HEAD 的改动。在你切换分支、用 git commit 停止提交、以及用 git reset 打消 commit 时,HEAD 会改动,但当你用  git checkout -- <bad filename> 打消时(正如我们在后面讲到的状况),HEAD 并不会改动 — 如前所述,这些修正历来没有被提交过,因而 reflog 也无法协助我们规复它们。
git reflog 不会永久坚持。Git 会活期清算那些 “用不到的” 工具。不要指望几个月前的提交还不断躺在那边。
你的 reflog 便是你的,只是你的。你不克不及用 git reflog 来规复另一个开辟者没有 push 过的 commit。

2015127114148155.png (1429×644)

少量的打消/规复

场景: 你向某个偏向开端完成一个特性,但是半路你认识到另一个方案更好。你曾经停止了十频频提交,但你如今只需求此中的一局部。你盼望其他不需求的提交通通消逝。

办法:
复制代码代码如下:git rebase -i <earlier SHA>

原理: -i 参数让 rebase 进入“交互形式”。它开端相似于后面讨论的 rebase,但在重新停止任何提交之前,它会停息上去并容许你细致地修正每个提交。

rebase -i 会翻开你的缺省文本编辑器,外面列出候选的提交。如下所示:

2015127114214865.png (1459×495)
后面两列是键:第一个是选定的下令,对应第二列里的 SHA 确定的 commit。缺省状况下, rebase -i  假定每个 commit 都要经过  pick 下令被运用。

要抛弃一个 commit,只需在编辑器里删除那一行就行了。假如你不再需求项目里的那几个错误的提交,你可以删除上例中的1、3、4行。

假如你需求保存 commit 的内容,而是对 commit 音讯停止编辑,你可以运用 reword 下令。 把第一列里的 pick 交换为 reword (或许间接用 r)。有人会以为在这里间接重写 commit 音讯就行了,但是如许不论用 —rebase -i 会疏忽 SHA 列后面的任何工具。它前面的文本只是用来协助我们记着 0835fe2 是干啥的。当你完成 rebase -i 的操纵之后,你会被提示输出需求编写的任何 commit 音讯。

假如你需求把两个 commit 兼并到一同,你可以运用 squash 或 fixup 下令,如下所示:

2015127114237973.png (1449×339)
squash 和 fixup 会“向上”兼并 — 带有这两个下令的 commit 会被兼并到它的前一个 commit 里。在这个例子里, 0835fe2 和 6943e85 会被兼并成一个 commit, 38f5e4e 和 af67f82 会被兼并成另一个。

假如你选择了 squash, Git 会提示我们给新兼并的 commit 一个新的 commit 音讯; fixup 则会把兼并清单里第一个 commit 的音讯间接给新兼并的 commit 。 这里,你晓得 af67f82 是一个“完了完了….” 的 commit,以是你会留着 38f5e4e as的 commit 音讯,但你会给兼并了 0835fe2 和 6943e85 的新 commit 编写一个新的音讯。

在你保管并加入编辑器的时分,Git 会按从顶部究竟部的次序运用你的 commit。你可以经过在保管前修正 commit 次序来改动运用的次序。假如你情愿,你也可以经过如下布置把 af67f82 和 0835fe2 兼并到一同:
2015127114254840.png (1445×326)

839x401

839x401-28K-PNG

GitHub运用流程- Git Shell 的一些下令总结(一)...

相干搜刮:

分享:
下载
宣布关于《_Git中一些打消和规复下令的运用小结_》的批评

福州电脑网(福州iThome)专业电脑/盘算机学习网站.提供电脑维修知识,包罗盘算机软件/硬件维修知识,路由器/交流机/网络设置,电脑蓝屏,网络/it知识学习等等钱汇网址学习材料.

免责声明:本站一切信息内容仅供参考,若有得罪您的权柄请联络我们删除!请各人留意:本站删帖完全收费。邮箱:

Copyright (C) FziThome.com, All Rights Reserved.

版权一切 闽ICP备14002611号-3