在git中,是否可以创建存储,将存储推送到远程存储库,在另一台计算机上检索存储,并应用存储?
或者是我的选择:
创建补丁并将补丁复制到另一台计算机,或
创建一个次要分支并将不完整的工作提交给该分支?
sehe.. 71
注意:我刚刚用24小时更多的git-fu重写了这个答案:)在我的shell历史中,整个shebang现在是三个单行.但是,为了您的方便,我已经将它们解开了.
这样,我希望你能看到我是如何做的,而不是只是盲目地复制/粘贴东西.
这是一步一步的.
假设〜/ OLDREPO中的源包含stashes.创建一个不包含stashes的TEST克隆:
cd ~/OLDREPO git clone . /tmp/TEST
将所有存储器作为临时分支推送:
git send-pack /tmp/TEST $(for sha in $(git rev-list -g stash); \ do echo $sha:refs/heads/stash_$sha; done)
在接收端循环以转换回被收藏:
cd /tmp/TEST/ for a in $(git rev-list --no-walk --glob='refs/heads/stash_*'); do git checkout $a && git reset HEAD^ && git stash save "$(git log --format='%s' -1 HEAD@{1})" done
如果愿意,清理你的临时分支机构
git branch -D $(git branch|cut -c3-|grep ^stash_)
做一个git存储列表,你会这样:
stash@{0}: On (no branch): On testing: openmp import stash@{1}: On (no branch): On testing: zfsrc stash@{2}: On (no branch): WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue stash@{3}: On (no branch): WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default stash@{4}: On (no branch): WIP on xattrs: 3972694 removed braindead leftover -O0 flag stash@{5}: On (no branch): WIP on testing: 3972694 removed braindead leftover -O0 flag stash@{6}: On (no branch): WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{7}: On (no branch): WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{8}: On (no branch): WIP on testing: 28716d4 fixed implicit declaration of stat64 stash@{9}: On (no branch): WIP on emmanuel: bee6660 avoid unrelated changes
在原始存储库中,看起来像
stash@{0}: WIP on emmanuel: bee6660 avoid unrelated changes stash@{1}: WIP on testing: 28716d4 fixed implicit declaration of stat64 stash@{2}: WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{3}: WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{4}: WIP on testing: 3972694 removed braindead leftover -O0 flag stash@{5}: WIP on xattrs: 3972694 removed braindead leftover -O0 flag stash@{6}: WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default stash@{7}: WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue #57) stash@{8}: On testing: zfsrc stash@{9}: On testing: openmp import
这对我来说很有效,除了我在`git stash save ...`之前需要一个`git add .`,因为`git stash`拒绝存储新文件,除非它们已经上演.另外,将`git rev-list ...`到`tac`的结果换成了stashes的顺序,这样它们就会以相同的顺序出现. (9认同)
u0b34a0f6ae.. 61
它不可能通过fetch得到它,镜像refspec是fetch = +refs/*:refs/*
,即使存储refs/stash
它不会被发送.显式refs/stash:refs/stash
也没有效果!
无论如何它只会令人困惑,因为那不会取得所有的藏匿处,只会取出最新的藏匿处; stashes列表是ref 的reflogrefs/stashes
.
注意:我刚刚用24小时更多的git-fu重写了这个答案:)在我的shell历史中,整个shebang现在是三个单行.但是,为了您的方便,我已经将它们解开了.
这样,我希望你能看到我是如何做的,而不是只是盲目地复制/粘贴东西.
这是一步一步的.
假设〜/ OLDREPO中的源包含stashes.创建一个不包含stashes的TEST克隆:
cd ~/OLDREPO git clone . /tmp/TEST
将所有存储器作为临时分支推送:
git send-pack /tmp/TEST $(for sha in $(git rev-list -g stash); \ do echo $sha:refs/heads/stash_$sha; done)
在接收端循环以转换回被收藏:
cd /tmp/TEST/ for a in $(git rev-list --no-walk --glob='refs/heads/stash_*'); do git checkout $a && git reset HEAD^ && git stash save "$(git log --format='%s' -1 HEAD@{1})" done
如果愿意,清理你的临时分支机构
git branch -D $(git branch|cut -c3-|grep ^stash_)
做一个git存储列表,你会这样:
stash@{0}: On (no branch): On testing: openmp import stash@{1}: On (no branch): On testing: zfsrc stash@{2}: On (no branch): WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue stash@{3}: On (no branch): WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default stash@{4}: On (no branch): WIP on xattrs: 3972694 removed braindead leftover -O0 flag stash@{5}: On (no branch): WIP on testing: 3972694 removed braindead leftover -O0 flag stash@{6}: On (no branch): WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{7}: On (no branch): WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{8}: On (no branch): WIP on testing: 28716d4 fixed implicit declaration of stat64 stash@{9}: On (no branch): WIP on emmanuel: bee6660 avoid unrelated changes
在原始存储库中,看起来像
stash@{0}: WIP on emmanuel: bee6660 avoid unrelated changes stash@{1}: WIP on testing: 28716d4 fixed implicit declaration of stat64 stash@{2}: WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{3}: WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{4}: WIP on testing: 3972694 removed braindead leftover -O0 flag stash@{5}: WIP on xattrs: 3972694 removed braindead leftover -O0 flag stash@{6}: WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default stash@{7}: WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue #57) stash@{8}: On testing: zfsrc stash@{9}: On testing: openmp import
它不可能通过fetch得到它,镜像refspec是fetch = +refs/*:refs/*
,即使存储refs/stash
它不会被发送.显式refs/stash:refs/stash
也没有效果!
无论如何它只会令人困惑,因为那不会取得所有的藏匿处,只会取出最新的藏匿处; stashes列表是ref 的reflogrefs/stashes
.
我参加聚会的时间有点晚了,但我相信我发现了一些对我有用的东西,如果你的情况相同或类似,也可能适合你.
我正在自己的分支机构中开发一个功能.分支机构没有合并为主机,直到完成或我已经提交了我觉得很舒服的向公众展示.因此,当我想将非分段更改传输到另一台计算机时,我所做的是:
使用像" [non-commit] FOR TRANSFER ONLY
" 这样的提交消息进行提交,其中包含您要传输的内容.
登录到另一台计算机.
然后做:
git pull ssh+git://
如果以不同方式访问存储库,则URL可能会有所不同.这会将该URL中的更改从远程分支"rb"拉入本地分支"lb".请注意,我在自己的计算机上运行了一个ssh服务器,并且能够以这种方式访问存储库.
git reset HEAD^
(暗示--mixed
)
这会将HEAD重置为指向"[non-commit]"提交之前的状态.
从git-reset(1):" --mixed
:重置索引但不重置工作树(即更改的文件被保留但未标记为提交)[...]"
因此,您最终将对文件进行更改,但不会对master进行提交,也不需要存储.
但是,这将要求您git reset --hard HEAD^
在存储器中进行"[非提交]",因为该提交是垃圾.
这有点晚了,但这个答案可能对某人有所帮助.我想知道这一点,因为我希望能够在另一台计算机上推送正在进行的功能/错误/任何工作.
对我有用的是提交我正在进行的代码(在我正在单独工作的分支中).当我到达我的另一台计算机时,请执行pull,然后使用以下命令撤消提交:
git reset --soft HEAD^
继续按原样工作,在那里进行所有正在进行的更改,未提交,并且未分级.
希望能帮助到你.
似乎有一个非常巧妙的技巧来解决这个问题.您可以使用git diff > file.diff
(并提交文件),然后使用git apply file.diff
(从任何地方)恢复更改以获得相同的结果.
这也在这里解释.
我会采用第二种方法,但不知道为什么你不能将它提交给master/featured分支.也可以做樱桃采摘.