Git中的TFVC“ Rollback”等同于什么?

时间:2019-04-10 09:34:39

标签: git visual-studio tfvc

如果我使用 T eam F 定位 S C 控制,我可以轻松地回滚到旧的变更集。

假设我有一个具有4个版本的文件,每个版本都有一个changset:

  • 变更集a126-版本1。
  • 变更集b347-版本2。
  • 变更集c560-版本3。
  • 变更集d912-版本4。

现在,我在版本3和版本4中发现了很多错误,我想迅速返回到版本2。

在Visual Studio中,我可以单击文件上的“查看历史记录”,单击Changeset b347(“版本2”),然后单击“回滚”。

现在我对版本2中的文件有了一个新的变更集,我可以签入(我的历史记录中仍然有版本3/4,所以我有时也可以返回到它们)。

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

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

5 个答案:

答案 0 :(得分:1)

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

这会完全删除c560d912,但是之后您需要强行推入。

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

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

git revert d912 c560

答案 1 :(得分:1)

假设您有4个提交A-B-C-D,文件foo.txt都已更改,并且CD的代码中有{{1 }}。

1。其他文件可能会在C和D中更改。如果您只想将foo.txt回滚到foo.txt的版本:

B

如果要提交回滚,

git checkout B -- foo.txt

历史记录为git commit

2。如果要回滚C和D的所有更改(包括其他文件的更改,如果有的话),并且CD已推送到远程存储库:

A-B-C-D-R1

历史记录为git revert D C

3。如果要回滚C和D的所有更改,并且CD尚未推送到远程存储库:

A-B-C-D-R2-R3

历史记录将为git reset B --hard 。您也可以在案例2中使用此解决方案,但随后需要强制推动分支以覆盖远程存储库中的分支。如果其他贡献者获取了旧的历史记录,则需要告诉他们获取新的历史记录。

答案 2 :(得分:0)

不知道TFVC中的签入内容是什么,但是如果您只想查看v2文件,则可以git checkout b347 -- thefilenameyouwant

答案 3 :(得分:0)

要继续处理工作副本中存储库的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

答案 4 :(得分:0)

(1)如何回滚和“丢失”版本3和4:

这很简单:

git reset --hard b347

说明:

  • 回到版本2。
  • 您将“丢失”版本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仍然存在并可用,但是它们将位于不同的分支上。