Git 中的 TFVC "Rollback" 相当于什么?

What is the equivalent of TFVC "Rollback" in Git?

如果我使用 Team Foundation Ssource C 控制我可以轻松回滚到旧的变更集。

假设我有一个包含 4 个版本的文件,每个版本都有一个变更集:

现在我发现版本 3 和版本 4 中有很多错误,我想尽快 return 回到版本 2。

在 Visual Studio 中,我可以单击文件上的 "View History",单击 Changeset b347 ("Version 2"),然后单击 "Rollback"。

现在我有一个新的变更集,其中包含版本 2 中的文件,我可以签入它(我的历史记录中仍然有版本 3/4,所以我有时也可以 return 给他们)。

在Git中,我知道有revertreset(硬的、软的),但我不知道我需要做什么才能达到相同的结果。

那么在 Git 中回滚到旧版本的最佳方法是什么(首选通过 Visual Studio)?

git reset --hard b347
git push -f origin master

这将完全删除 c560d912,但之后您需要强制推送。

What's the difference between Git Revert, Checkout and Reset?

要撤消创建新提交的更改:

git revert d912 c560

不知道TFVC里check-in是什么,如果只是想看v2文件,可以git checkout b347 -- thefilenameyouwant

假设您有 4 个提交 A-B-C-D,文件 foo.txt 在每个提交中都被更改,并且 CD 的代码有 D 引入的错误 foo.txt.

1.Other 文件可能在 C 和 D 中更改。如果只想回滚 foo.txtB 的版本:

git checkout B -- foo.txt

如果要提交回滚,

git commit

历史将是 A-B-C-D-R1

2.If您想回滚C和D的所有修改(包括其他文件的修改,如果有的话),CD已经推送到远程仓库:

git revert D C

历史将是 A-B-C-D-R2-R3

3.If您想回滚C和D的所有更改,并且CD尚未推送到远程存储库:

git reset B --hard

历史将是 A-B。您也可以将此解决方案用于案例 2,但您随后需要强制推送分支以覆盖远程存储库中的分支。如果其他贡献者已获取旧历史记录,您需要告诉他们获取新历史记录。

要继续处理工作副本中存储库的 v2 状态,您可以执行

# get uncommitted changes out of the way
git stash

# recreate v2 in the working copy
git checkout commit-hash-or-tag-of-v2 

# create new branch based on v2
git checkout -b branchname-for-new-branch

(1) 如何回滚和 "lose" 版本 3 和 4:

就这么简单:

git reset --hard b347

解释:

  • 回到版本 2。
  • 您将 "lose" 版本 3 和 4。
  • 如果您仍想获得版本 3 和 4,那么这些提交在您的 reflog 中仍然可用一段时间,具体取决于您的设置(默认时间段是记忆中的 90 天)。

或 (2) 创建一个新分支(以保留版本 3 和 4):

  • 您可以简单地在版本 2 上创建一个新分支。

    git checkout b347

    git checkout -b redo-work-from-version-2

解释:

  • 你会回到 b347,处于无头状态。暂时忽略这个。
  • 我们创建了一个名为 redo-work-from-version-2 的新分支。
  • 版本 3 和版本 4 仍然存在并且可用,但它们将在不同的分支上。