Git删除分支和所有相应的更改

时间:2014-01-25 21:18:46

标签: git

我是git的新手,在创建/删除分支方面领先于自己并希望找到正确的流程。基本上,我开始了一个新的分支(branch_a)然后进行了一些更改。然后我决定测试一个第三方软件包知道它可能无法正常工作。此时,我在分支A中进行了一些更改,我没有进行分级或提交。我接着结帐了一个新的分支(branch_b)。我玩这个“测试分支”,然后决定删除它。首先,我检查了原始分支:

git checkout branch_a

然后,我删除了分支,认为我所做的所有更改也会被删除:

git branch -d branch_b

所以分支被删除但是当我回到branch_a继续我离开的地方工作时,我发现我在branch_b中所做的更改仍然存在。由于我之前没有提交任何内容,因此我无法弄清楚如何在branch_b和帖子branch-b之前分隔更改。这还有可能吗?

就“过程”而言,是否有更好的方法来创建和删除测试分支?例如。我应该使用git reset --hard吗?

2 个答案:

答案 0 :(得分:4)

我会猜测发生了什么。

您在branch_a中进行了更改。你没有提交。你检查了新的分支branch_b,做了一些东西,没有提交。现在您切换回branch_a。 git确实会让你继续肮脏的工作目录。

清理它(假设我的猜想是正确的)

为了清理你的烂摊子,请执行git status。您需要git add branch_a所有git commit项目。然后执行branch_a以在branch_b中保存您想要的内容。请注意,它只提交您添加到舞台的项目。

现在你可以自由地回到git addgit status你想要的东西,并且也可以提交。 branch_a提供了很好的帮助文字,可以帮助您。

我推荐的工作流程:

您在branch_a工作。你有想法尝试不同的东西。如果您认为自己将在15分钟内返回git stash save <message>,请执行branch_a。这使git rebase -i内容保持独立。如果你要长一点,就去提交吧。不用担心,您可以稍后使用交互式rebase清理它:master。挂起来有点烦人,你可以不小心删除它们或在你不想要的时候弹出它们。

现在返回branch_b,然后创建git checkout -b branch_b。我最喜欢的方式是一体化命令branch_a。现在你可以在那里工作。完成实验后,再次进行存储或提交。请记住,只要你不推动,你就可以毫不犹豫地提交,并在以后通过互动式改造进行清理。

查看git stash pop并继续在那里工作。如果您藏匿了某些内容,请弹出存储:{{1}}。否则你承诺了,它已经在那里等你了。

答案 1 :(得分:1)

使用gitk --all查看哪个分支当前指向哪个提交。

如果您没有提交更改,git对您的更改一无所知。

使用git status检查工作树中的文件是否与git已知的文件不同。它还会告诉你如何改变它。

在更改分支之前,请确保您提交更改(让当前分支机构了解您的更改)或丢弃您的更改。切勿使用未提交的更改来更改分支。

它还有助于为shell配置一个好的git提示符。对于bash,你可以使用类似的东西:

PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
GIT_PS1_SHOWDIRTYSTATE=yes # show changed files as `*`
GIT_PS1_SHOWUNTRACKEDFILES=yes # show new files as `%`
GIT_PS1_SHOWSTASHSTATE=yes 
GIT_PS1_SHOWUPSTREAM=auto

如果您按此方式设置提示,请确保在更改分支之前未显示*%。如果它确实使用git status来帮助做什么。