我能从远程仓库获取stash并合并到本地分支吗?

20

我的同事在他们的代码库中有一个我可以访问的暂存区(通过文件系统),我想将该暂存区拉取到我代码库的一个分支中。

%git ls-remote ~alice/work/repo/ stash
3ccc82fb1ee0e7bde1250c7926d333ce21c109c0        refs/stash

但是当我尝试获取时,git告诉我“无法找到3cc82 ...”

%git fetch ~alice/work/repo stash:new_branch
remote: Total 0 (delta 0), reused 0 (delta 0)
error: unable to find 3ccc82fb1ee0e7bde1250c7926d333ce21c109c0
fatal: object 3ccc82fb1ee0e7bde1250c7926d333ce21c109c0 not found

有没有办法我可以获取远程的暂存区呢?

3个回答

13

是的,你可以部分地这样做。 储藏只是另一个引用。 通过指定完整的引用路径和一个refspec,您可以获取不是头(分支)的引用。

git fetch some-remote +refs/stash:refs/remotes/some-remote/stash
git stash apply some-remote/stash

您可以将其配置为在普通的获取操作中也提取暂存区:

git config --add remote.some-remote.fetch +refs/stash:refs/remotes/some-remote/stash
git fetch some-remote
git stash apply some-remote/stash

但是,如果没有一个被标记为“无效refspec”的stash存在,这种方法将失败,因为该引用不存在,因此最好根据需要执行操作。您可以设置别名,例如:

cat > /usr/local/bin/git-fetch-stash
git fetch --verbose "$1" +refs/stash:refs/remotes/"$1"/stash 
^D
chmod +x /usr/local/bin/git-fetch-stash

git fetch-stash some-remote

需要注意的是,您无法获取多个存储。这些存储在reflog中作为条目存储,并且您无法获取远程的reflog。


9
更新: 对原帖作者的问题的直接回答是:
git send-pack ./ 3ccc82fb1ee0e7bde1250c7926d333ce21c109c0:refs/heads/tempbranch

"'tempbranch'将在远程的最新存储(stash@{0})中。不幸的是,我认为reflog未从远程分支获取,因此无法访问其他存储,除非您可以访问源存储库。"
"脚本化:我在提到的问题中发布了一个更全面的“脚本化”解决方案。"
"是否可能将git stash推送到远程存储库?"
"同时,正如我在此期间发现的那样,如果您可以访问源存储库,则git-send-pack可能非常有用:"
git send-pack ../myworkingfolder/ stash@{0}:refs/heads/collegue_stash

1
谢谢,我看到了(并点赞了)。然而,这个问题试图解决一个不同的问题;我可以看到远程仓库,但是我的同事已经隐藏了它,然后回家告诉我了这个隐藏,所以我只想抓住那个隐藏。有一些更长的解决方案(例如制作补丁并在本地应用它),但我正在寻找一种直接将隐藏获取到我的仓库中的方法。 - Matt Curtis
编辑了更多见解的评论 - sehe

1

嗨naven87。我确实看到了其他SO的问题,但那并不适合我的需求。感谢你的回答,如果没有其他人发布更直接的解决方案,我会在一段时间后接受它。 - Matt Curtis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接