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



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

(在TFSC中,我将使用"shelved"它变成了一个"生命"的搁架集。在TF服务器上))

What I tried:

  • 我创建了一个新的分支"backup_2021-02-13"然后切换到
  • 我提交了更改。
  • 我把它推到远程回购。

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

但现在我有以下问题:两者都是"大师"。分支以及在"backup_2021-02-13";在备份分支上,我看不到之前挂起的更改:我看不到它们,因为它们已经提交了(是的,更改在那里,但是已经提交了)。我无法在主分支上看到它们,因为在那里,这些更改根本不存在。

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

所以,我所做的是,我将更改从备份分支合并到主分支(不提交,只关闭,压缩)。通过这种方式,我将主分支中未提交的更改作为未提交的更改,就像在任何备份工作之前一样。

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

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

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

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

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

@phd的答案是正确的,可能是您需要的正确答案。只需将其视为部分备份,仅包括您的工作目录。我想说的是,这样做你就失去了指数的变化。相反,要存储索引的更改,您需要创建进一步的提交。所以,从master开始:

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本身的合并提交。

你做对了。为了将更改保存到远程,您必须提交到非主分支并推送(例如backup_2021-02-13)

大多数人所做的是在分支中进行开发,直到完全完成,然后像你一样将更改合并到Master (ff, squash)。这个开发分支基本上是每天"搁置"的。变化。

要查看分支中未完成的更改,只需"git diff master";查看更改

最新更新