Git: 备份未提交的更改到远程存储库

Git: Backup uncommitted changes to remote repository

我想备份本地未提交的更改到远程存储库以备份更改(以防本地硬盘损坏等)

(在 TFSC 中,我只是将更改“搁置”到一个搁置集中(它“存在”在 TF 服务器上))

我尝试了什么:

此时,我的更改已保存在远程存储库中(这意味着我可以在本地硬盘损坏的情况下恢复信息)

但是现在我遇到了以下问题: 在“master”分支和“backup_2021-02-13”分支中,我都看不到之前挂起的更改:我在备份分支上看不到它们,因为它们已经提交(是的,更改在那里,但已经承诺)。我在 master 分支上看不到它们,因为那里根本不存在这些更改。

但我想继续工作,就好像备份过程从未发生过一样(所有未提交的更改仍然未提交)。

所以,我所做的是,我将备份分支的更改合并到主分支(无提交、ff-only、压缩)。这样,我在 master 分支中将未提交的更改作为未提交的更改,就像在任何备份工作之前一样。

但我怀疑这是正常的做法。

那么,什么是将本地未提交的更改备份到远程存储库的正确(也是最简单)的方法,但同时保持当前(主)分支不变(所有未提交的更改仍未提交)?

你的流程没问题。切换到 master 后,您只需要恢复在备份分支中提交的更改:

git checkout master
git checkout backup_2021-02-13 -- .

第二个命令从分支 backup_2021-02-13 恢复所有文件。继续工作。

你走在正确的轨道上。为了将更改保存到远程,您必须提交到非主分支并推送(例如 backup_2021-02-13)

大多数人所做的是在分支中进行开发,直到完全完成,然后像您一样将更改合并到 Master (ff, squashed)。这个开发分支本质上是日常“搁置”的改动。

要查看分支中的待定更改,您只需“git diff master”即可查看更改。

@phd 的回答是正确的,可能是满足您需要的正确答案。只需考虑它是部分备份,仅包括您的工作目录。我的意思是,这样做会丢失索引的变化。相反,为了也存储索引的更改,您需要创建一个进一步的提交。所以,从大师开始:

git checkout -b my_backup
git commit -m "first the index"
git add .
git commit -m "and now the working dir"
git checkout --detach HEAD
git reset HEAD~1
git reset --soft master
git checkout master

它很长,但你可以将它移动到脚本中(可能带有备份分支名称和当前分支的参数)并且它也很容易理解。 git stash 做了类似的事情,但脚本会稍微复杂一些,我不确定 stash 逻辑将来是否会有所不同。目前,一个完整的存储创建了 3 个提交:一个带有索引,一个带有未跟踪的更改,另一个是前两个和 HEAD 本身的合并提交。