我如何从我目前的状态转向在某个承诺上拍摄的截图?

如果我做 git 登录,那么我会得到以下输出:

$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <me@me.com>
Date:   Thu Nov 4 18:59:41 2010 -0400

blah blah blah...

commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <me@me.com>
Date:   Thu Nov 4 05:13:39 2010 -0400

more blah blah blah...

commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <me@me.com>
Date:   Thu Nov 4 00:55:06 2010 -0400

And yet more blah blah...

commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <me@me.com>
Date:   Wed Nov 3 23:56:08 2010 -0400

Yep, more blah blah.

我如何转向11月3日的承诺,即承诺0d1d7fc?


当前回答

您可以自行完成所有这些初步步骤,然后按一下返回 Git 存储库。

使用 git pull --all 命令从 Bitbucket 播放您的存储库的最新版本. 从您的终端运行 Git 存储库命令 -n 4 之后的号码决定从您本地历史上最新的存储库中的订单数量. $ git 存储库 -n 4 使用 git reset --hard HEAD~N 重新设置存储库历史的头,在那里 N 是订单数量

如果您想要 Git 存储库到以前的承诺:-

git pull --all
git reset --hard HEAD~1
git push --force

其他回答

好吧,回到以前的承诺在Git是相当容易的......

返回,不遵守变更:

git reset --hard <commit>

返回,保持变更:

git reset --soft <commit>

解释:使用 git 重新设置,您可以重新设置到一个特定的状态。

但当你看到区别是使用两个旗帜 - 软和 - 硬,通过默认 git 重新设置使用 - 软旗,但这是一个很好的做法,总是使用旗帜,我解释每个旗帜:


默认旗帜如所述,不需要提供它,不改变工作树,但它添加了所有更改的文件准备承诺,所以你回到承诺状态,这些变更到文件失踪。


要小心这个旗帜,它恢复了工作树和跟踪的文件的所有变化,一切都将消失!


我还创建了下面的图像,这可能发生在与Git合作的现实生活中:

此分類上一篇

这很大程度上取决于你指的是“逆转”。

暂时转换到另一个承诺

# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32

git checkout -b old-state 0d1d7fc32

要回到你所在的地方,只需检查你所在的分支再次(如果你做了变化,如往常交换分支时,你将不得不处理它们,你可以重新设置,把它们扔掉;你可以打破,支票,打破,把它们带到你身边;你可以承诺它们到一个分支,如果你想要一个分支在那里。

硬删除未发表的承诺

如果,另一方面,你真的想摆脱你从那时起所做的一切,有两种可能性。

# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32

# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.

如果你混乱,你已经扔掉了你的地方变化,但你至少可以通过重新设置回到你以前的地方。

下一篇: 与新承诺发布的承诺

# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053

# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD

#Similarly, you can revert a range of commits using commit hashes (non inclusive of first hash):
git revert 0d1d7fc..a867b4a

# Reverting a merge commit
git revert -m 1 <merge_commit_sha>

# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .

# Then commit. Be sure and write a good message describing what you just did
git commit

您也可以在此情况下找到这个答案有用:我如何将头转回以前的位置?(解密头) & Undo 承诺

但是,这里被问及如何取消具体的承诺,在这种情况下,它是取消过去的三个承诺,回到11月3日的承诺。

你可以用下调来做到这一点:

git rebase -i HEAD~4

这将列出你的最后四个承诺。

现在你有取消命令的选项,你用 drop 文本这样做。

只需在键盘上点击我,并在承诺旁边,您要删除写下滴,而不是默认选择在键盘上,点击输出和 :wq

要确保承诺被删除,写下:

git log

你會看到,當滴滴被移除時,你得救的行為。

要将这些变化推到您的远程分支,请写下:

git push --force

为了完全清理编码器的目录,我们使用了:

git add -A .
git reset --hard HEAD

只是 git reset --hard HEAD 会摆脱修改,但它不会摆脱“新”文件。在他们的情况下,他们偶然在某个地方随机拖动了一个重要的文件夹,所有这些文件都被 Git 处理为新的,所以一个 reset --hard 没有修复它。

注意! 这个命令可能会导致失去承诺历史,如果用户错误地把错误的承诺。

我有一个类似的问题,我想回到以前的承诺,在我的情况下,我不感兴趣保持新的承诺,所以我使用了硬。

这就是我这样做的:

git reset --hard CommitId && git clean -f

这将转向本地存储库,在这里使用 git push -f 后将更新远程存储库。

git push -f

例如,如果你想完全忽略与名称的承诺执行非团体管理政策从下图

此分類上一篇

你会跑

git reset --hard dd52eb9 && git clean -f

跟随的

git push -f

接下来,你不会看到这个承诺(强制非团体管理政策)在那里

此分類上一篇