VS Code Git:还原到特定的提交

VS Code Git:还原到特定的提交,git,visual-studio-code,Git,Visual Studio Code,我正在使用VS代码,希望返回到特定的提交a。我目前在C: A -> B -> C 最后一次提交是C,现在我想将所有文件设置回提交A时的状态。在VS代码中如何才能做到这一点?如果需要,在VS代码中使用命令行也可以-那么您希望B和C位于辅助分支上?现在做一个新的分支,头部在C,以保留B和C,但不要检查它;留在主人身边,不管这是什么。现在git重置-硬A 实例 我先做A,然后做B,然后做C,在master上: $ echo "this is A" >> test.txt $

我正在使用VS代码,希望返回到特定的提交a。我目前在C:

A -> B -> C

最后一次提交是C,现在我想将所有文件设置回提交A时的状态。在VS代码中如何才能做到这一点?如果需要,在VS代码中使用命令行也可以-

那么您希望B和C位于辅助分支上?现在做一个新的分支,头部在C,以保留B和C,但不要检查它;留在主人身边,不管这是什么。现在git重置-硬A

实例 我先做A,然后做B,然后做C,在master上:

$ echo "this is A" >> test.txt
$ git init
Initialized empty Git repository in /Users/mattmobile/Desktop/f/.git/
$ git add .
$ git commit -a -m "this is A"
[master (root-commit) 14cfab0] this is A
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
$ echo "this is B" >> test.txt
$ git commit -a -m "this is B"
[master d55a780] this is B
 1 file changed, 1 insertion(+)
$ echo "this is C" >> test.txt
$ git commit -a -m "this is C"
[master 328183e] this is C
 1 file changed, 1 insertion(+)
让我们检查一下;是的,A然后B然后C:

$ git log
commit 328183e34767ed1bb06834e47d9bb3524e768546 (HEAD -> master)

    this is C

commit d55a780bcf1bda20ad7ceacce7c7c3777295fd59

    this is B

commit 14cfab017f3718bc7f3126e73aa187ec62b5d2a3

    this is A
现在我后悔不已。如果B和C在自己的分支上,我的分支上,我就可以回到A上继续工作。好:

$ git branch mybranch
$ git reset --hard 14cfab
HEAD is now at 14cfab0 this is A
所以现在mybranch位于C,并保留了父A的C和B,但master位于A,我可以继续工作。让我们证明一下。我将添加D:

$ git status
On branch master
nothing to commit, working tree clean
$ echo "this is D" >> test.txt
$ git commit -a -m "this is D"
[master bf8a4d4] this is D
 1 file changed, 1 insertion(+)
我们得到了什么

$ git log
commit bf8a4d478ce61a78de94619ffea1dc58d1c9a799 (HEAD -> master)

    this is D

commit 14cfab017f3718bc7f3126e73aa187ec62b5d2a3

    this is A
所以master由A组成,然后是D,这正是我们想要的。同时,B和C仍然作为mybranch存在:


所以你希望B和C在二级分支机构?现在做一个新的分支,头部在C,以保留B和C,但不要检查它;留在主人身边,不管这是什么。现在git重置-硬A

实例 我先做A,然后做B,然后做C,在master上:

$ echo "this is A" >> test.txt
$ git init
Initialized empty Git repository in /Users/mattmobile/Desktop/f/.git/
$ git add .
$ git commit -a -m "this is A"
[master (root-commit) 14cfab0] this is A
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
$ echo "this is B" >> test.txt
$ git commit -a -m "this is B"
[master d55a780] this is B
 1 file changed, 1 insertion(+)
$ echo "this is C" >> test.txt
$ git commit -a -m "this is C"
[master 328183e] this is C
 1 file changed, 1 insertion(+)
让我们检查一下;是的,A然后B然后C:

$ git log
commit 328183e34767ed1bb06834e47d9bb3524e768546 (HEAD -> master)

    this is C

commit d55a780bcf1bda20ad7ceacce7c7c3777295fd59

    this is B

commit 14cfab017f3718bc7f3126e73aa187ec62b5d2a3

    this is A
现在我后悔不已。如果B和C在自己的分支上,我的分支上,我就可以回到A上继续工作。好:

$ git branch mybranch
$ git reset --hard 14cfab
HEAD is now at 14cfab0 this is A
所以现在mybranch位于C,并保留了父A的C和B,但master位于A,我可以继续工作。让我们证明一下。我将添加D:

$ git status
On branch master
nothing to commit, working tree clean
$ echo "this is D" >> test.txt
$ git commit -a -m "this is D"
[master bf8a4d4] this is D
 1 file changed, 1 insertion(+)
我们得到了什么

$ git log
commit bf8a4d478ce61a78de94619ffea1dc58d1c9a799 (HEAD -> master)

    this is D

commit 14cfab017f3718bc7f3126e73aa187ec62b5d2a3

    this is A
所以master由A组成,然后是D,这正是我们想要的。同时,B和C仍然作为mybranch存在:


你的问题不清楚,因为你漏掉了分支机构的信息。您是否也要更改分支点的位置,并丢弃B和C?然后使用git重置-hard。或者你想暂时在一家娱乐中心玩一玩?然后使用git checkout.@JonathonReinhart我想保留B,C,但永久地使用A。事实上,我很懒,在提交了一个测试后,我没有做分支,而是为了测试而到处玩。我想在提交B和C中保留我的测试内容,但在A状态下继续。您的问题不清楚,因为您遗漏了有关分支的信息。您是否也要更改分支点的位置,并丢弃B和C?然后使用git重置-hard。或者你想暂时在一家娱乐中心玩一玩?然后使用git checkout.@JonathonReinhart我想保留B,C,但永久地使用A。事实上,我很懒,在提交了一个测试后,我没有做分支,而是为了测试而到处玩。我想将我的测试内容保留在提交B和C中,但继续保持A状态。这就是为什么我最近在一个已经得到很好回答的问题上添加了这个答案。你的后悔类型是3:顺便说一句,对不起,我对VS一无所知;这里只是显示命令行。哈哈,很酷,非常感谢。明天将检查并让您知道它是如何工作的:-可能有一个VS方法来执行此操作,但我当然不知道它是什么。分支已创建,主机已重置为a,谢谢:-当然被接受为正确答案。当我签出我的新分支并执行git日志时,我没有看到我的提交C,只有B。但是,在Azure Devops online中检查我的回购,它还显示了分支中的commit C。你知道那里发生了什么吗?这就是为什么我最近在一个已经回答得很好的问题上添加了这个答案。你的后悔类型是3:顺便说一句,对不起,我对VS一无所知;这里只是显示命令行。哈哈,很酷,非常感谢。明天将检查并让您知道它是如何工作的:-可能有一个VS方法来执行此操作,但我当然不知道它是什么。分支已创建,主机已重置为a,谢谢:-当然被接受为正确答案。当我签出我的新分支并执行git日志时,我没有看到我的提交C,只有B。但是,在Azure Devops online中检查我的回购,它还显示了分支中的commit C。知道那里发生了什么吗?