如果我使用 T eam F 定位 S 源 C 控制,我可以轻松地回滚到旧的变更集。
假设我有一个具有4个版本的文件,每个版本都有一个changset:
现在,我在版本3和版本4中发现了很多错误,我想迅速返回到版本2。
在Visual Studio中,我可以单击文件上的“查看历史记录”,单击Changeset b347(“版本2”),然后单击“回滚”。
现在我对版本2中的文件有了一个新的变更集,我可以签入(我的历史记录中仍然有版本3/4,所以我有时也可以返回到它们)。
在Git中,我知道有revert
,reset
(硬,软),但是我不完全知道需要做什么才能达到相同的结果。
那么回滚到Git中的旧版本(通过Visual Studio首选)的最佳方法是什么?
答案 0 :(得分:1)
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
答案 1 :(得分:1)
假设您有4个提交A-B-C-D
,文件foo.txt
都已更改,并且C
和D
的代码中有{{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)
这很简单:
git reset --hard b347
说明:
您只需在版本2中创建一个新分支即可。
git checkout b347
git checkout -b redo-work-from-version-2
说明:
redo-work-from-version-2
的新分支。