2016-07-07 67 views
1

我想要做什么:我正在使用git版本控制的代码。我意识到一些测试不是使用旧版本的代码运行的(2次在同一分支上提交)。所以我想运行那些需要修改一些git-follow输入文件的测试,然后我想回到我的开发版本,就好像什么都没发生一样(不关心输入文件中的变化,因为我不关心关于这些变化)。GIT进入旧版本并返回到正在开发的版本

我做了什么:我git存储我的underdev版本,然后git结帐到旧版本。我修改了几个文件并做了运行。然后就出现了这个问题:当我应用存储时,我没有回到我的underdev版本(我想我会)。在旧版本中,我保持独立的头部状态。

幸运的是我注意到了underdev版本的ID,所以我认为我可以结帐返回那里。但是,任何人都可以向我解释我做错了什么,以及如何以干净的方式做我想做的事。

回答

0

你underdev是两件事情:

  • 提交历史
  • 不分阶段的变化

你救使用Git藏匿在不分级的变化。

为了回到你的underdev版本,你需要结账到你藏起来的那个分支。

你可以在git stash show找到该信息。

这是你的工作流程:

git stash 
git checkout OLD_COMMIT 
*do some work* 
#Throw the changes away 
git checkout . 
git checkout UNDERDEV_BRANCH 
git stash pop 
+0

'藏匿流行'在这里可能是有风险的,因为如果重新应用补丁混淆了工作可能会丢失。对于OP的情况,使用'stash apply'可能会更安全一些... –

+0

@ Jonathan.Brink在完全相同的代码中创建的存储没有理由不适用。但是,如果你想要超级安全,你可以使用'stash apply'和'stash drop'。 – blue112

+0

将存储应用于原始存储的相同代码时的好处是没有冲突的可能性。在Git工作流程中仍然需要采取安全措施时 –

0

比方说,你开始了对foo分支。

这句话似乎在暗示你没有得到你的头指针回到它原来的位置:

我在旧版本仍然是一个分离的头状态

所以,走出“分离的头”的状态,并恢复联合国提交的工作:

git checkout foo 
git stash apply 

在将来,它可能更容易简单地用这样的工作流程提交一个主题分支您正在进行的工作:

# save your work on a topic branch 
git checkout -b myTopicBranch 
git add . 
git commit -m "wip" 

# run tests on older revision 
git checkout oldSha 
run tests... 

# ok, done, back to work 
git checkout myTopicBranch 

然后,只需合并您的工作回主一旦在topic分支完成的工作。

+0

不,不在主分支上......我的项目分支。 – raoulpetite

+0

@raoulpetite gotcha,我更新了我的答案,只使用通用分支作为起点 –

+0

那么,当我检查myTopicBranch时,git告诉我“下面的未跟踪工作树文件将被checkout覆盖:file_name。或者在切换分支之前删除它们,放弃。“ – raoulpetite

0

如果你已经承诺你的underdev版本的每一个变化,你的工作树是干净的,git stash只是告诉No local changes to save,在这种情况下,不添加新的藏匿。

如果你的underdev版本有一个分支名称,只需git checkout <branch>可以带你回去。更常用的方法是使用git reflog来查找HEAD曾经提到的以前的提交。