从对 git 分支和主交互的困惑中重新发布。
我还是不明白!
我有 1 个名为“miscChanges”的分支,其中我对某些页面进行了更改(我尚未提交)。现在,当我尝试签出“主”分支时,我收到消息“...文件将被覆盖查看。呸呸呸'。
我不想在“miscChanges”分支上提交我的更改,因为我还没有完成。
在这种情况下进行的合乎逻辑的方法是什么?
4 回答
您需要先提交更改。尝试git add -A
(添加当前目录中的所有更改,包括新文件和已删除文件),然后git commit
.
基本上,git 会警告您,当您签出 master 分支时,它将覆盖您工作目录中的所有文件——包括您未提交的更改。
分支只是一个指向现有提交 ID 的指针(引用)。更改当前分支意味着选择不同的指针。
这意味着未提交的更改不会保留在前一个分支上,因为没有地方存储这些更改。因此,在更改分支时,git 会尝试将这些更改保留在新的代码库中。更具体地说,工作树中与旧分支上最后提交状态不同的任何文件将在签出后保留在工作树中。但是如果这些文件在旧分支和新分支之间存在差异,git 会抱怨不兼容的更改:它不能将修改后的文件保留在工作树中,因为原始文件不一样。
有三种方法可以解决这个问题:
- 做一个临时提交,你稍后会丢弃它:
git commit -a -m tmp
git checkout master
- ...做你的主人的工作...
git checkout miscChanges
git reset HEAD~
- 做一个临时提交,你稍后会改进:
git commit -a -m tmp
git checkout master
- ...做你的主人的工作...
git checkout miscChanges
- ...在 miscChanges 分支上做更多的工作...
git commit --amend
- 使用存储:
git stash save 'work in progress on branch miscChanges'
git checkout master
- ...做你的主人的工作...
git checkout miscChanges
git stash pop
如果您保存了多个存储,您可以查找应该弹出哪一个:
git stash list
# Find the right stash number, in the form stash@{N}
git stash pop stash@{3}
首先,回答您收到错误消息的原因 - 当您在 git 中签出分支时,它会更改磁盘上的文件以匹配分支的状态。那会覆盖您正在处理的内容,因此它会警告您。
其次,回答你应该怎么做——如果你赶时间,你可以做“git stash”,它会在你查看另一个分支时临时保存你的更改。(你以后必须用谷歌搜索如何取消存储。)更完整的处理方法是创建一个新分支(“git checkout -b new_branch”,如果我记得的话)并在你查看 master 时提交你的更改. 您始终可以将该临时分支拉回或合并回 miscChanges 并删除临时分支。
还要记住 git 是分布式源代码控制。在您推送之前,其他任何人都不会看到您对 miscChanges 分支的更改,因此从技术上讲,您可以提交不完整的内容并在推送之前对其进行修复,尽管您的历史记录中会出现您的功能不完整的状态。如果您回到 miscChanges 并在完成该功能时执行“git commit --amend ...”,您可能能够避免这种情况。
如果您还不想提交更改,则必须对它们做一些事情。你可以做一个git stash
,改变分支,做你需要的任何事情,然后改回你的“miscChanges”分支并做git stash apply