在不重置最新提交的情况下执行上一次提交的代码

时间:2018-02-09 06:56:40

标签: git version-control

我正在尝试验证我的更改没有破坏现有代码。为此,在提交更改后,我运行代码,我需要使用之前的一次提交验证输出(没有我的更改)。因此,在完成验证后,我的更改仍必须是最新的提交。

5 个答案:

答案 0 :(得分:2)

最简单的方法可能就是在分离的HEAD状态下检查先前的提交:

git checkout HEAD~1

您应该看到类似这样的消息:

  

你处于“独立的HEAD”状态......

从这一点开始,您可以构建项目并进行测试。当你想回到分支机构的HEAD时,很容易做到这一点:

git checkout master      # or replace 'master' by the branch name

答案 1 :(得分:1)

蒂姆的答案有效,但我建议你实际上是在遵循一个不太理想的工作流程。请注意,我可能会误解你的问题。

如果您想在不破坏现有代码的情况下进行更改,最好签出新分支并在新分支中进行更改(例如,称为 test1 )。然后,您可以在 test1 中自由测试更改的代码,同时保留现有分支中未更改的代码,这可能是 master 或(更好) develop

一旦您测试了新分支并对您的更改感到满意,您就可以将 test1 合并或重新绑定到 master / develop

这可以避免进入分离的头状态,允许比较多个不同的代码版本(通过多个新分支),并且通常只是利用真正让Git闪耀的精彩分支功能。

答案 2 :(得分:0)

只是想确定,您使用的是团队城市还是其他一些自动构建工具?在这种情况下,您可以选择指定GIT路径和先前提交的版本。如果您只是尝试在本地构建,则需要在本地使用以前的代码并执行。

由于 Rakesh Yadav

答案 3 :(得分:0)

将之前的提交签出到另一个文件夹中,以便当前文件夹不受影响。

解决方案1:

创建一个新克隆并查看非常提交。

git clone <url> -- another_folder
cd another_folder
git checkout <commit>
#run the code

但是,如果存储库非常大或者网络不好,则会花费很多时间和空间。您已在本地存储库中拥有提交,因此您可以使用本地存储库作为远程存储库:

git clone <url_to_the_existing_local_repository> -- another_folder

此外,您可以使用本地存储库作为参考:

git clone <url> --reference=<url_to_the_existing_local_repository> -- another_folder

不同之处在于前者的远程是现有的本地存储库,而后者是远程存储库。您可以在不再需要时删除新文件夹。

解决方案2:

如果您使用的是新版本的Git(在2.10.0或更新版本之后),请使用git-worktree

cd <path_to_the_repository>
git worktree add <path_to_another_folder> <the_previous_commit>
cd <path_to_another_folder>
#run the code
#after everything is done, you could just delete the new folder
rm -rf <path_to_another_folder>
cd <path_to_the_repository>
git worktree prune

git worktree add创建一个新文件夹,并将提交检出到新文件夹中。您可以在该文件夹中运行git命令。该文件夹是另一个与默认工作树共享相同.git的工作树。 Git允许创建多个工作树。

答案 4 :(得分:0)

Git为此目的提供了bisect命令:“使用二进制搜索来查找引入错误的提交”。

开始于:

git bisect start
git bisect bad   # mark the current commit as bad
git bisect good 5678..cded # mark a previous commit as good
然后,git bisect将检查中值提交,并估计在发现引入回归的提交之前剩余的步数:

Bisecting: 20 revisions left to test after this (roughly 4 steps)

测试签出的版本,将其标记为好或坏,冲洗并重复,直到找到“罪魁祸首”。

请参阅[参考文档]((https://git-scm.com/docs/git-bisect)上的bisect命令的完整文档。