Git删除分支和所有相应的更改
我是一个新手,在创建/删除分支方面领先一点,并想找出正确的过程。 基本上,我开始了一个新的分支( branch_a
),然后做了一些改变。 然后我决定测试一个第三方软件包,知道它可能无法正常工作。 在这一点上,我在分支A中进行了一些改变,但我没有分阶段或提交。 我继续检查一个新的分支( branch_b
)。 我玩弄了这个“测试分支”,然后决定删除它。 首先,我完成了对原始分支的检查:
git checkout branch_a
然后,我删除了分支,认为我所做的所有更改都会被删除:
git branch -d branch_b
所以分支被删除,但是当我回到branch_a
继续从离开的地方开始工作时,我发现我在branch_b
中所做的更改仍然存在。 由于我之前没有提交任何内容,因此我无法弄清楚如何分隔pre- branch_b
和post branch-b
的更改。 这仍然是可能的吗?
就“流程”而言,是否有更好的方式来创建和删除测试分支? 例如,我应该使用git reset --hard
?
我会猜想发生了什么事。
您在branch_a
进行了更改。 你没有提交。 你签出了新的分支branch_b
,做了一些东西,没有提交。 现在您切换回branch_a
。 git的确可以让你继承一个肮脏的工作目录。
清理它(假设我的猜想是正确的)
为了清理你的垃圾,执行git status
。 你需要git add
所有你想为branch_a
的项目。 然后执行一个git commit
来保存你在branch_a
想要的branch_a
。 请注意,它只提交您添加到舞台的项目。
现在你可以自由地回到branch_b
, git add
你想要的东西,并且承诺。 git status
有很好的帮助文本来帮助你。
我推荐的工作流程
你在branch_a
工作。 你有个想法去尝试一些不同的东西。 如果您认为您将在15分钟内回到branch_a
,请执行git stash save <message>
。 这使branch_a
东西分开。 如果你要更长时间,只需提交。 不要担心,您可以稍后使用交互式底图对其进行清理: git rebase -i
。 徘徊有点让人讨厌,你可能会意外地删除它们,或者在你不想要的时候弹出它们。
现在回到master
,并创建branch_b
。 我最喜欢的方式是all-in-one命令git checkout -b branch_b
。 现在你可以在那里工作。 完成实验后,再次储存或提交。 请记住,只要你不推动,你就可以提交给你,然后用交互式重新分配来清理它。
检查branch_a
并继续在那里工作。 如果你收藏了某些东西,请打开藏匿处: git stash pop
。 否则你承诺,它已经在那里等着你。
使用gitk --all
查看哪个分支当前指向哪个提交。
如果你没有提交你的修改,git不知道你的修改。
使用git status
来检查工作树中的文件是否与已知的git不同。 它也会告诉你如何改变它。
在更改分支之前,请确保您提交更改(让当前分支知道您的更改)或放弃更改。 切勿以未提交的更改更改分支。
它也将有助于为你的shell配置一个好的git提示符。 对于bash,你可以使用类似于:
PS1='[ 33[01;32m]u@h[ 33[00m]:[ 33[01;34m]w[ 33[31m]$(__git_ps1)[ 33[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
来帮助做什么。
上一篇: Git delete branch and all corresponding changes
下一篇: Can I send changes of git staged area for code review (to any code review tool)?