有什么方法可以保存我当前的更改而无需在Git中提交或隐藏呢?

时间:2018-08-13 19:13:15

标签: git

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

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

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

有这样的功能吗?

4 个答案:

答案 0 :(得分:4)

签出一个新分支,添加文件并在那里提交更改。然后改回到您以前使用的分支。

我将使用相同的方法尝试第二种方法。

答案 1 :(得分:0)

我认为@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?

答案 2 :(得分:0)

Git使用情况依赖提交

这是一个普遍的问题(例如,没有特定的代码/树示例可用于工作),因此您将获得一个普遍的答案。简短的版本是:不,Git不能保存提交或向索引添加内容以外的工作。即使 stash 命令也是提交的一种特殊情况,并利用这些基本流程。

但是,在Git内部和外部当然可以做一些事情。一些示例包括(无特定顺序):

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

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

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

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

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

答案 3 :(得分:0)

按照 Sidney Gizejen 建议的答案,我认为在最后添加一个 cherry-pick 步骤会使其对您有用。假设您当前在分支 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 选项可以应用但不提交更改。