我在我的开发分支中有一些未提交的更改,并且我使用它们进行了存储git stash
,但是有些更改在那些被隐藏的更改中非常重要.有没有办法找回这些变化?
此外,我已经在存储的代码文件之上做了一些更改.
如果可能的话,我是否有可能检索到新分支的藏匿更改?
tor*_*rek 1008
git stash apply
只需查看您想要更改的分支,然后git stash apply
.然后git diff
用来查看结果.
在您完成所有更改后 - apply
看起来很好并且您确定不再需要存储 - 然后使用git stash drop
它来摆脱它.
我总是建议使用git stash apply
而不是git stash pop
.不同之处在于apply
留下了藏匿物,以便于重新尝试apply
,或者用于查看等等.如果pop
能够提取藏匿物,它也会立即提取drop
它,如果你突然意识到你想要将它提取到某个地方否则(在不同的分支中),或与之相关--index
,或某些此类,并非如此简单.如果你apply
,你可以选择什么时候drop
.
尽管如此,这一切都很小,对于git的新手来说,它应该是一样的.(你可以跳过其余的所有内容!)
至少有三到四种不同的"使用git stash的方法".以上是"方式1","简单的方法":
你开始使用一个干净的分支,正在进行一些更改,然后意识到你正在错误的分支中执行它们.您只想进行现在的更改并将其"移动"到另一个分支.
这是上面描述的简单情况.运行git stash save
(或简单git stash
,相同的事情).查看其他分支并使用git stash apply
.使用git相当强大的合并机制,这可以让git在您之前的更改中合并. 仔细检查结果(用git diff
),看看你是否喜欢它们,如果你喜欢它们,请用它git stash drop
来放下藏匿物.你完成了!
你开始做一些改变并把它们藏起来了.然后你切换到另一个分支并开始更多的更改,忘记你有被隐藏的那些.
现在,您希望保留甚至移动这些更改,并应用您的存储.
事实上git stash save
,你可以再次git stash
做出"堆叠"的变化.如果你这样做,你有两个藏匿处,一个叫做stash
- 但你也可以写stash@{0}
- 一个拼写stash@{1}
.使用git stash list
(在任何时候)全部查看.最新的始终是编号最低的.当你git stash drop
,它掉落最新的,并且stash@{1}
移动到堆栈顶部的那个.如果你有更多的,那是一个stash@{2}
变stash@{1}
,等等.
你可以apply
,然后drop
一个特定的藏匿点,git stash apply stash@{2}
等等.删除特定的存储,只重新编号较高编号的存储.同样,没有数字的那个也是stash@{0}
.
如果你堆积了很多东西,它会变得相当混乱(是我想要的存储stash@{7}
还是它stash@{4}
?等等,我只是推了另一个,现在它们是8和5?).我个人更喜欢将这些更改转移到一个新的分支,因为分支有名称,cleanup-attempt-in-December
对我来说意味着更多stash@{12}
.(该git stash
命令采用可选的保存消息,这些可以提供帮助,但不知何故,我的所有藏匿处都被命名WIP on branch
.)
(超高级)在运行之前git stash save -p
,您已经使用过,或者经过仔细考虑git add
和/或git rm
编写了代码的特定位git stash save
.您在stashed索引/暂存区域中有一个版本,在工作树中有另一个(不同的)版本.你想保留所有这些.所以现在你使用git stash apply --index
,有时会失败:
Conflicts in index. Try without --index.
Run Code Online (Sandbox Code Playgroud)您正在使用git stash save --keep-index
以测试"将要提交的内容".这个超出了这个答案的范围; 请看其他StackOverflow代替.
对于复杂的情况,我建议首先在"干净"的工作目录中启动,提交您现在所做的任何更改(如果您愿意,可以在新的分支上).这样你正在应用它们的"某个地方"就没有别的了,你只会尝试隐藏的变化:
git status # see if there's anything you need to commit
# uh oh, there is - let's put it on a new temp branch
git checkout -b temp # create new temp branch to save stuff
git add ... # add (and/or remove) stuff as needed
git commit # save first set of changes
Run Code Online (Sandbox Code Playgroud)
现在你处于一个"干净"的起点.或者它可能更像是这样:
git status # see if there's anything you need to commit
# status says "nothing to commit"
git checkout -b temp # optional: create new branch for "apply"
git stash apply # apply stashed changes; see below about --index
Run Code Online (Sandbox Code Playgroud)
要记住的主要事情是"存储" 是一个提交,它只是一个有点"有趣/怪异"的提交,而不是"在一个分支上".该apply
操作会查看提交更改的内容,并尝试在任何位置重复提交.存储仍然存在(apply
保持它),所以你可以更多地看它,或者确定它是错误的地方,apply
并以不同的方式再次尝试.
只要你有藏匿处,你就可以git stash show -p
用来查看藏匿处内容的简化版本.(此简化版本仅查看"最终工作树"更改,而不是--index
单独还原的已保存索引更改.)该命令git stash apply
没有--index
,只是尝试在您的工作目录中进行相同的更改.
即使您已经有一些更改,也是如此.该apply
命令很乐意将存储应用于已修改的工作目录(或至少尝试应用它).例如,您可以这样做:
git stash apply stash # apply top of stash stack
git stash apply stash@{1} # and mix in next stash stack entry too
Run Code Online (Sandbox Code Playgroud)
您可以在此处选择"应用"订单,选择要按特定顺序应用的特定存储.但是,请注意,每次基本上执行"git merge"时,并且合并文档会发出警告:
不鼓励使用非平凡的未提交更改运行git merge:尽管可能,但是在发生冲突的情况下,它可能会使您处于难以退出的状态.
如果你从一个干净的目录开始并且只是做几个git apply
操作,那么很容易退出:git reset --hard
用来恢复干净状态,并改变你的apply
操作.(这就是为什么我建议首先在干净的工作目录中开始,对于这些复杂的情况.)
假设你正在做很多高级Git Stuff,并且你已经做了一个藏匿,并且想要git stash apply --index
,但是不再可能应用已保存的存储--index
,因为自你保存它以来分支已经分歧太多了.
这git stash branch
是为了什么.
如果你:
stash
,然后git stash apply --index
尝试重新创建更改肯定会起作用.这是做什么的.(然后它会成功应用后丢弃存储.)git stash branch newbranch
--index
(它到底是什么?)这样做的--index
解释很简单,但内部有点复杂:
git add
(或"阶段")他们之前commit
.git stash
,你可能已编辑这两个文件foo
和zorg
,但只上演其中的一个.git add
是add
ed的东西并且不是 git add
非添加的东西可能会很好.也就是说,如果您在执行之前已经add
编辑foo
但没有zorg
返回stash
,那么拥有完全相同的设置可能会更好.什么上演,应该再次上演; 修改但未上演的内容应再次修改但不上演.尝试以这种方式设置的--index
标志apply
.如果你的工作树很干净,这通常是有效的.但是,如果你的工作树已经有了东西add
,你可以看到这里可能存在一些问题.如果省略--index
,apply
操作不会尝试保留整个暂存/未暂存的设置.相反,它只是使用"存储袋"中的工作树提交来调用git的合并机制.如果你不关心保持阶段性/非阶段性,那么离开--index
会让事情变得更容易git stash apply
.
Ste*_*sca 47
git stash pop
Run Code Online (Sandbox Code Playgroud)
将使一切恢复原状
如评论中所建议的,您可以使用git stash branch newbranch
将存储应用于新分支,这与运行相同:
git checkout -b newbranch
git stash pop
Run Code Online (Sandbox Code Playgroud)
Mee*_*iya 19
要取回隐藏的更改...您可以使用单个命令
git stash pop
Run Code Online (Sandbox Code Playgroud)
查看隐藏的更改列表
git stash list
Run Code Online (Sandbox Code Playgroud)
清除隐藏更改
git stash clear
Run Code Online (Sandbox Code Playgroud)
Nes*_*ric 18
为简单起见,您有两种方法可以重新应用您的存储:
git stash pop
- 还原到已保存状态,但它会从临时存储中删除存储.git stash apply
- 恢复到已保存状态并保留存储列表,以便以后重用.您可以在本文中阅读有关git stashes的更多详细信息.
Zac*_*ack 10
在 mac 上这对我有用:
git stash list(查看你所有的存储)
git stash list
Run Code Online (Sandbox Code Playgroud)
git stash apply (只是您想要从存储列表中获得的数字)
像这样:
git stash apply 1
Run Code Online (Sandbox Code Playgroud)
要检查您的隐藏内容:
git存储列表
从存储列表中应用特定的存储号:-
git stash apply stash @ {2}
或仅应用第一个存储区:
git stash pop
小智 5
您可以使用以下方法隐藏未提交的更改:
git stash
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令签出到新分支:
git checkout -b
Run Code Online (Sandbox Code Playgroud)
然后应用隐藏的提交:
git stash apply
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
491928 次 |
最近记录: |