如何在我的分支中只存储多个已更改文件中的一个?


当前回答

我已经回顾了这个问题的答案和评论以及一些类似的线索。请注意,为了能够隐藏任何特定的跟踪/未跟踪文件,以下命令都不正确:

git stash-p(--patch):手动选择大块,不包括未跟踪的文件git stash-k(--keep index):隐藏所有跟踪/未跟踪的文件,并将它们保存在工作目录中git stash-u(--包括未跟踪的):隐藏所有已跟踪/未跟踪的文件git stash-p(--patch)-u(--include untracked):无效命令

目前,能够隐藏任何特定跟踪/未跟踪文件的最合理方法是:

暂时提交不想隐藏的文件添加并隐藏弹出临时提交

在回答另一个问题时,我为这个过程编写了一个简单的脚本,这里有SourceTree中执行该过程的步骤。

其他回答

当您尝试在两个分支之间切换时,会出现这种情况。

尝试使用“git add filepath”添加文件。

稍后执行此行

git stash—保留索引

您可以简单地执行以下操作:

git stash push "filename"

或带有可选消息

git stash push -m "Some message" "filename"

对于VS代码的用户。Git侧边栏视图中Changes组的隐藏按钮将仅隐藏组中的文件。因此,如果您将一些文件移出该组,则可以隐藏其余文件。我所知道的在不恢复更改的情况下将一些文件移出的唯一方法是将它们暂存。因此:

暂存您不想隐藏的文件单击更改组标题中的隐藏按钮取消对您移开的文件的分级

git add .                           //stage all the files
git reset <pathToFileWillBeStashed> //unstage file which will be stashed
git stash                           //stash the file(s)
git reset .                         // unstage all staged files
git stash pop                       // unstash file(s)

类似的情况。做了承诺,意识到这不好。

git commit -a -m "message"
git log -p

根据这些回答,这对我有帮助。

# revert to previous state, keeping the files changed
git reset HEAD~
#make sure it's ok
git diff
git status
#revert the file we don't want to be within the commit
git checkout specs/nagios/nagios.spec
#make sure it's ok
git status
git diff
#now go ahead with commit
git commit -a -m "same|new message"
#eventually push tu remote
git push