git藏两个分支

Gab*_*raz 6 git git-stash git-branch

这种情况:

  1. 我在分支A上进行了更改
  2. git stash 在分支A上
  3. git checkout B
  4. 在分支B上进行了更改
  5. git stash 在分支B上
  6. git checkout A
  7. git stash pop 在分支A上

在上述清单的第7步之后,我在存储之前在分支A上所做的更改没有恢复,但是在分支B上进行的更改在分支A上弹出。我cmd z在分支A上使用了该文件,并回到了先前的状态,有我所做的更改。这似乎分支的移动分支B的同样的事情发生在头部头部时,我git checkout Bgit stash pop该分支:分支B的所有分支一所做的更改,但不是我的分支B.我所做的更改用于cmd z再恢复到我需要的分支状态。

一段时间以来,这给我带来了很多问题,直到被允许再次在项目上提交代码(没人可以提交一段时间,因为提交时会自动将服务器推送到服务器,并且经理不希望新的代码出现在服务器中)。服务器,直到他们运行了一些测试)。如何仅弹出分支本身所做的更改,而不弹出其他分支所做的更改?

tor*_*rek 7

什么git stash是提交。1个

当然,要做的git commit就是提交。那么,为什么我们要拥有git stash呢?

这些命令之间的显着区别是,提交git stash使它们不在任何分支上。这使您可以stash在一个分支上时,然后移至另一个分支并在其中应用存储。换句话说,它使您可以进行正在进行的工作。

无论如何,您可以经常但不总是移动正在进行的工作。当当前分支上有未提交的更改时,请参阅Git-签出另一个分支。但是,当您做不到时,可以使用它git stash来处理。

另一方面,如果您要像情况那样“存储在分支上”,则最好只进行常规提交,而不要进行特殊的存储提交。这样的提交是容易对付,也没有一个错误git stash都有。您不太可能遇到此错误,但是“避免常规提交更简单,更易于处理”(分支上的提交,隐藏)git stash

如果您git stash仍然愿意使用,请注意,每个新存储区都会在“存储区堆栈”中将先前的存储区“推”到更高的位置。旧的存储变为stash@{1},什么stash@{1}变为stash@{2},依此类推。当你drop(丢弃)或pop(尝试应用,然后丢弃)藏匿,堆积的人在它上面移动回落,所以如果你是git stash drop stash@{3}当你有stash@{4}stash@{5},以及,你会留下stash@{3}stash@{4}现在。

您可以这样命名任何存储库,包括最新存储库:与的stash@{0}含义相同stash。(Git实际上使用reflog来实现所有这些功能stash。)


1实际上,它至少进行两次提交,有时进行三次提交。这两个提交存储索引和工作树状态。第三次提交(如果存在)来自-u-a存储未暂存(-u)或所有(-a)文件。工作树提交是一个非常奇怪的合并提交,索引提交是它的第二个父提交,而第三次提交(如果存在)是它的第三个父提交。工作树提交的第一个父级和索引提交的唯一父级是您运行时的当前提交git stash

如果您绘制提交图片段(在您使用Git进行任何复杂的操作时都是个好主意),则索引和工作树提交对与原始提交无关,其中refs/stash引用指向该对,而不是分支名称。它看上去几乎像一个小手提包,或者是一个悬挂在树枝上的食物储藏室,以使其远离熊等,所以我喜欢将其称为“储物袋”。