我更改了许多文件,但我意识到我的方法不好。因此,我想尝试另一种方法。在这种情况下,我知道两种解决方案:
我要寻找的是以某种方式保存我的当前更改(而不丢失我的当前更改),然后在保留其余更改的同时丢弃一些我不需要的更改。在这种情况下,如果我意识到我的第二种方法也不起作用,那么我只需要切换到先前的状态即可。
有这样的功能吗?
答案 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不能保存提交或向索引添加内容以外的工作。即使 stash 命令也是提交的一种特殊情况,并利用这些基本流程。
但是,在Git内部和外部当然可以做一些事情。一些示例包括(无特定顺序):
git commit --patch
选择要添加到索引的diff块来挑选正在进行的更改。将工作树复制到另一个目录,还原到上一次已知的良好提交,并在运行时将文件或块复制回工作树。例如:
mkdir /tmp/broken_wip
cp * /tmp/broken_wip
git reset --hard
cp /tmp/broken_wip/somefile .
创建一个临时分支来存储您的“脏”提交,然后更改回主分支。然后,您可以从临时分支带来任何您喜欢的东西。例如,假设您当前在 master 上:
git checkout -b broken_branch
git add .
git commit -am 'broken WIP'
git checkout master
使用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
选项可以应用但不提交更改。