我是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
吗?
答案 0 :(得分:4)
我会猜测发生了什么。
您在branch_a
中进行了更改。你没有提交。你检查了新的分支branch_b
,做了一些东西,没有提交。现在您切换回branch_a
。 git确实会让你继续肮脏的工作目录。
清理它(假设我的猜想是正确的)
为了清理你的烂摊子,请执行git status
。您需要git add
branch_a
所有git commit
项目。然后执行branch_a
以在branch_b
中保存您想要的内容。请注意,它只提交您添加到舞台的项目。
现在你可以自由地回到git add
,git 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
来帮助做什么。