Git中TFVC“Rollback”的等价物是什么?

问题描述 投票:0回答:5

如果我使用Team Foundation Source Control,我可以轻松回滚到旧的变更集。

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

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

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

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

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

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

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

git visual-studio tfvc
5个回答
1
投票

假设你有4个提交A-B-C-D,文件foo.txt在每个中都有变化,CD的代码有foo.txt引入的bug。

1.可以在C和D中更改其他文件。如果要仅将foo.txt回滚到B的版本:

git checkout B -- foo.txt

如果要提交回滚,

git commit

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

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

git revert D C

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

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

git reset B --hard

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


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

0
投票

不知道TFVC中有什么签到,但是如果你只是想查看v2文件,你可以git checkout b347 -- thefilenameyouwant


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

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仍然存在且可用,但它们将位于不同的分支上。
© www.soinside.com 2019 - 2024. All rights reserved.