Git 中的 TFVC "Rollback" 相当于什么?
What is the equivalent of TFVC "Rollback" in Git?
如果我使用 Team Foundation Ssource C 控制我可以轻松回滚到旧的变更集。
假设我有一个包含 4 个版本的文件,每个版本都有一个变更集:
- 变更集 a126 - 版本 1。
- 变更集 b347 - 版本 2。
- 变更集 c560 - 版本 3。
- 变更集 d912 - 版本 4。
现在我发现版本 3 和版本 4 中有很多错误,我想尽快 return 回到版本 2。
在 Visual Studio 中,我可以单击文件上的 "View History",单击 Changeset b347 ("Version 2"),然后单击 "Rollback"。
现在我有一个新的变更集,其中包含版本 2 中的文件,我可以签入它(我的历史记录中仍然有版本 3/4,所以我有时也可以 return 给他们)。
在Git中,我知道有revert
、reset
(硬的、软的),但我不知道我需要做什么才能达到相同的结果。
那么在 Git 中回滚到旧版本的最佳方法是什么(首选通过 Visual Studio)?
git reset --hard b347
git push -f origin master
这将完全删除 c560
和 d912
,但之后您需要强制推送。
见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
在每个提交中都被更改,并且 C
和 D
的代码有 D
引入的错误 foo.txt
.
1.Other 文件可能在 C 和 D 中更改。如果只想回滚 foo.txt
到 B
的版本:
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 仍然存在并且可用,但它们将在不同的分支上。
如果我使用 Team Foundation Ssource C 控制我可以轻松回滚到旧的变更集。
假设我有一个包含 4 个版本的文件,每个版本都有一个变更集:
- 变更集 a126 - 版本 1。
- 变更集 b347 - 版本 2。
- 变更集 c560 - 版本 3。
- 变更集 d912 - 版本 4。
现在我发现版本 3 和版本 4 中有很多错误,我想尽快 return 回到版本 2。
在 Visual Studio 中,我可以单击文件上的 "View History",单击 Changeset b347 ("Version 2"),然后单击 "Rollback"。
现在我有一个新的变更集,其中包含版本 2 中的文件,我可以签入它(我的历史记录中仍然有版本 3/4,所以我有时也可以 return 给他们)。
在Git中,我知道有revert
、reset
(硬的、软的),但我不知道我需要做什么才能达到相同的结果。
那么在 Git 中回滚到旧版本的最佳方法是什么(首选通过 Visual Studio)?
git reset --hard b347
git push -f origin master
这将完全删除 c560
和 d912
,但之后您需要强制推送。
见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
在每个提交中都被更改,并且 C
和 D
的代码有 D
引入的错误 foo.txt
.
1.Other 文件可能在 C 和 D 中更改。如果只想回滚 foo.txt
到 B
的版本:
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 仍然存在并且可用,但它们将在不同的分支上。