【问题标题】:Not able to do git reset to previous commit in travis无法在 travis 中将 git 重置为先前的提交
【发布时间】:2019-01-18 17:11:22
【问题描述】:

在 travis 中构建我的代码时,如果失败,我希望将 HEAD 重置为上一次提交并执行一些操作。问题是当我在travis.yml 时:

after_failure:
- git reset --hard HEAD@{1}

它总是指向最新的提交。

如果我这样做git reset --hard HEAD 04d24f1,我会收到fatal: Cannot do hard reset with paths.,并且由于某种原因打印哈希会在我尝试重置为的提交旁边显示字母m

1b8bc73 (HEAD, origin/feature/RXM-73-create-aws-rollback-script, feature/RXM-73-create-aws-rollback-script) Fail 7
* 04d24f1m Pass 7  << letter m added
* 8c6a51e Fail 6
* 37e3e38 Pass 6

如果我打印git reflog -4 的提交历史记录,那么我只会得到 2 个提交并且它们都有相同的哈希

1b8bc73 (HEAD, origin/feature/RXM-73-create-aws-rollback-script, feature/RXM-73-create-aws-rollback-script) HEAD@{0}: checkout: moving from feature/RXM-73-create-aws-rollback-script to 1b8bc736d2297be68e18d13de74dde3f75694072
1b8bc73 (HEAD, origin/feature/RXM-73-create-aws-rollback-script, feature/RXM-73-create-aws-rollback-script) HEAD@{1}: clone: from https://github.com/MaxRepo/terraform-rx-manager-service.git

如果我打印git log --oneline --graph --decorate 的提交历史记录,那么它会显示这样的历史记录:

* 1b8bc73 (HEAD, origin/feature/RXM-73-create-aws-rollback-script, feature/RXM-73-create-aws-rollback-script) Fail 7
* 04d24f1m Pass 7
* 8c6a51e Fail 6
* 37e3e38 Pass 6
* 4ddfd89 Pass 5

附加信息 - 一开始这是 travis 在运行命令之前所做的:

0.74s$ git clone --depth=50 --branch=feature/RXM-73-create-aws-rollback-script https://github.com/MaxRepo/terraform-rx-manager-service.git MaxRepo/terraform-rx-manager-service
Cloning into 'MaxRepo/terraform-rx-manager-service'...
remote: Enumerating objects: 118, done.
remote: Counting objects: 100% (118/118), done.
remote: Compressing objects: 100% (91/91), done.
remote: Total 175 (delta 52), reused 61 (delta 22), pack-reused 57
Receiving objects: 100% (175/175), 32.98 KiB | 8.24 MiB/s, done.
Resolving deltas: 100% (66/66), done.
$ cd MaxRepo/terraform-rx-manager-service
$ git checkout -qf 1b8bc736d2297be68e18d13de74dde3f75694072

你知道为什么我在 Travis 上构建时无法get reset 吗?

【问题讨论】:

  • git reset --hard HEAD~1 呢?
  • @SajibKhan 非常感谢您的建议。它确实有效,你的答案是正确的。我在想git reset --hard HEAD@{1} 会做同样的事情。需要研究它们之间的区别。
  • git reset --hard HEAD 04d24f1 的问题在于列出了两个提交:HEAD 是一个,04d24f1 是另一个。您想要 sha1,如 04d24f1,或基于 HEAD 的东西,但不能同时使用两者。所以git reset --hard 04d24f1 也应该有效。

标签: git continuous-integration travis-ci travis-ci-cli travis-ci-api


【解决方案1】:

正如 Sajib Khan 已经指出的,你想要

git reset --hard HEAD~1

而不是git reset --hard HEAD@{1}


有一些有用的信息here,解释了差异。 *简而言之,HEAD,在您的情况下,除了(HEAD, origin/feature/RXM-73-create-aws-rollback-script, feature/RXM-73-create-aws-rollback-script),从未指向任何其他地方,而@ 表示法用于头部在哪里 *。

您可以通过查看来调查可能的@{#} 值列表

git reflog

为了验证HEAD 没有指向其他地方。

【讨论】:

    猜你喜欢
    • 2020-12-12
    • 2015-07-05
    • 2015-05-08
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多