有没有办法在 Git 中没有提交或存储的情况下保存我当前的更改?



我更改了很多文件,我意识到我的方法不好。所以,我想尝试另一种方法。在这种情况下,我知道两种解决方案:

  1. 提交:我不想使用此功能,因为我知道我当前的代码不起作用。
  2. Stash:我也不想使用它,因为我错过了几个文件,我必须再次重写它们。

我正在寻找的是以某种方式保存我当前的更改(而不会丢失我当前的更改(,然后丢弃一些我不想要的更改,同时保留其余的更改。在这种情况下,如果我意识到我的第二种方法也不起作用,那么我只需要切换到以前的状态。

有这样的功能吗?

我认为@Signey_Gijzen的答案可能是最好的,但你也可以用git stash apply做到这一点。 也就是说,您需要执行以下操作:

$ git stash             # as usual, stashes the changes
... now your changes are gone from the working tree ...
$ git stash apply       # unstashes, but keeps stash around
... now they're all back ...
$ git stash list        # the stash will still be there
stash@{0}: WIP on master: ...
$ git show stash@{0}    # what did that stash look like again?

签出一个新分支,添加文件并在那里提交更改。然后更改回您之前正在处理的分支。

我会使用相同的方法来尝试您的第二种方法。

Git 的使用依赖于提交

这是一个一般性问题(例如,没有特定的代码/树示例可供使用(,因此您将获得一个通用答案。简短的版本是:不,Git 无法保存提交或向索引添加内容之外的工作。即使是stash命令也是提交的特例,并利用了这些基本进程。

但是,在 Git 内部和外部,您肯定可以做一些事情。一些例子包括(排名不分先后(:

  1. 执行软重置为已知良好的提交,然后通过使用git commit --patch选择要添加到索引的差异大块来挑选正在进行的更改。
  2. 将工作树
  3. 复制到另一个目录,恢复到上次已知良好的提交,并随时将文件或大块文件复制回工作树中。例如:

    mkdir /tmp/broken_wip
    cp * /tmp/broken_wip
    git reset --hard
    cp /tmp/broken_wip/somefile .
    
  4. 创建一个临时分支来存储您的"脏"提交,然后更改回主分支。然后,您可以从临时分支机构带上任何您喜欢的东西。例如,假设您当前使用的是master

    git checkout -b broken_branch
    git add .
    git commit -am 'broken WIP'
    git checkout master
    
  5. 使用 RCS
  6. 存储当前状态,同时确保不提交RCS目录或任何*,v文件。

即使您不想发布历史记录,通常也最好将问题代码提交到临时主题分支,修复或导入内容,然后释放主题分支。但是,如果您确实需要避免将内容提交到历史记录或索引中,则可能应该利用二级修订控制系统或使用文件系统。

您的里程可能会有所不同。

按照Sidney Gizejen提出的答案,我认为在最后添加一个樱桃挑选步骤会让它对你有用。假设您当前在分支current_branch上,并希望将更改保存到分支temp_branch,您可以执行以下操作:

git checkout -b temp_branch
git add <the_things_you_wanna_add>
git commit -m "..."
git checkout current_branch
git cherry-pick temp_branch -n

cherry-pick命令将应用给定提交引入的更改。在这种情况下,由于您正在传递一个分支,因此它将使用该分支上的最后一次提交。-n选项可以应用更改但不提交更改。

相关内容

最新更新