2012-04-26 242 views
4

在开始我的项目之前,我忘了切换到新分支,现在我需要将我的更改推送到新分支(而不是主分支),以便其他人检查我的工作。我的工作已经完成,但是保存在当地的主人手中。Git - 忘记切换分支

如何将我的更改移动到新的分支,所以当我推它时并不会弄乱主分支,而是创建一个新的远程分支?

+0

你承诺所有的工作了吗?如果是这样,它只是一个提交还是一系列的提交? – 2012-04-26 13:50:19

+0

我相信如此,这将是一个系列。 – Kim 2012-04-26 13:55:07

回答

0

我不知道发生了什么,但是当我随后KurzedMetal git的命令,它没有给我想要的结果。

因此,除了重做我的更改外,没有其他选择,尽管在执行硬重置前重新备份了远程主文件夹以及导出了更改的文件。导出和备份都是毫无价值的,因为它们包含与本地存储库完全相同的内容,因此我的更改是丢失。我曾预计不变。

幸运的是,在我开始解决推送问题之前,我已经隐藏了我的更改。
注意:硬重置后未删除新创建的文件。

这里是我的步骤来解决:

  1. 完成你的变化(仍然是
  2. 远程主拉动的新变化,解决任何冲突
  3. TortoiseGit -> Stash save。输入一条消息以区别于其他的存储 - >确定
  4. TortoiseGit -> Show log。选择最新的主人,然后右键单击并选择Reset,然后选择Hard option - >确定
  5. TortoiseGit -> Create Branch。输入名称并选中复选框Switch to new branch - >好吧
  6. TortoiseGit -> Stash list。选择您保存的存储 - >确定
  7. 现在您可以看到不同文件的列表。对于每个文件,比较差异并再次将更改应用于新重置的文件
  8. 完成后,在本地文件夹内右键单击。您应该看到Git Commit -> "BranchName" ...以上TortoiseGit,选择第一个
  9. 确认提交哪些文件,然后输入一个合适的描述 - >确定
  10. 现在你已经准备好pushTortoiseGit -> Push,检查本地分支是否是您选择的名称。如果没有,那么你忘了切换分支在5,并且必须从6继续。

我希望这会帮助别人。要记住的事情:当你开始一个新的功能/非小的改变时切换到一个新的分支

+0

'git stash'只有在你没有'不承诺任何事情,而且你说你已经多次承诺。 – KurzedMetal 2012-04-27 11:06:48

+0

我说'我相信'。正如你所猜测的那样,我对使用存储库还是很陌生的。一方面,我得到了'Git Bash'的工作 - 我只需要使用'cd'命令导航到我的repo文件夹,因为'Git Bash'显然不会在我的repo文件夹中启动,因此它没有隐藏的“git”文件夹检查。 – Kim 2012-04-27 12:01:57

+0

如果你想使用git来获得流体,我建议你阅读[在线专业版Git book](http://progit.org/book/),它很简短,有整洁的图表来表示git如何看你的数据,并且易于理解。当我开始时,它帮了我很多。 – KurzedMetal 2012-04-27 12:46:16

1

在与主人相同的位置创建新分支。

签出主,并硬重置您当前的分支到您想要回滚到提交。

12

首先,由于您已完成所有本地主分支的工作,请创建指向提示或本地主分支的新功能分支。

$ git checkout -b newfeature master 

,然后离开主,因为它是在服务器(远程)

$ git checkout master 
$ git reset --hard origin/master 
+0

即时通讯只使用图形用户界面(Git Bash给我错误)。我做了“创建分支”并选择了“HEAD”,“[]切换到新分支”未被选中。然后我打开日志,选择最新的主条目并选择“重置”,然后选择“硬”。看看这些文件,我看到我的更改没有了,但是当我切换到新的分支并要求查看“差异”时,什么也没有显示出来!他们不应该去那里? – Kim 2012-04-26 14:17:35

+0

@Kim我不确定你在GUI中做了什么,无论你在哪里做这些步骤,这些步骤都可以工作,你必须跳过一步。如果你只使用GUI,我真的很难帮到你,因为我讨厌Tk接口,所以我几乎没有'git gui'的经验。记住分支和标签只是指向提交的指针,git实际上不会在垃圾收集之前删除任何内容。如果您在执行此步骤时失去了任何更改,您可以查看'git relog'来恢复以前的提交。 – KurzedMetal 2012-04-27 10:59:45

+0

而不是使用checkout来创建分支,你可以只做一个 'git branch newfeature'然后你只需要做'git reset --hard origin/master' – 2013-12-04 03:49:08