对分支感到困惑

时间:2012-09-26 17:32:51

标签: git logic

confused about git branches and master interaction重新发布。
我还是不明白! 我有一个名为'miscChanges'的分支,其中我对某些页面进行了更改(我还没有提交)。现在,当我尝试检出'master'分支时,我收到消息'...文件将被覆盖查看。等等等等 我不想在'miscChanges'分支上提交我的更改,因为我没有完成。
在这种情况下进行的逻辑方法是什么?

4 个答案:

答案 0 :(得分:1)

分支只是现有提交ID的指针(引用)。更改当前分支意味着选择不同的指针。

这意味着未提交的更改不会保留在上一个分支上,因为没有地方存储这些更改。因此,在更改分支时,git会尝试将这些更改保留在新的代码库中。更具体地说,工作树中与旧分支上的上次提交状态不同的任何文件将在结账后保留在工作树中。但是如果旧分支和新分支之间的文件不同,git会抱怨不兼容的更改:它不能将修改后的文件保留在工作树中,因为原始文件不一样。

有三种方法可以解决这个问题:

  1. 做一个你后来丢弃的临时提交:
    1. git commit -a -m tmp
    2. git checkout master
    3. ......做你的主人......
    4. git checkout miscChanges
    5. git reset HEAD~
  2. 做一个你稍后改进的临时提交:
    1. git commit -a -m tmp
    2. git checkout master
    3. ......做你的主人......
    4. git checkout miscChanges
    5. ...在miscChanges分支上做更多工作......
    6. git commit --amend
  3. 使用stash
    1. git stash save 'work in progress on branch miscChanges'
    2. git checkout master
    3. ......做你的主人......
    4. git checkout miscChanges
    5. git stash pop
  4. 如果您保存多个藏匿处,则可以查找应弹出哪一个:

    git stash list
    # Find the right stash number, in the form stash@{N}
    git stash pop stash@{3}
    

答案 1 :(得分:0)

您需要先提交更改。尝试git add -A(添加当前目录中的所有更改,包括新文件和已删除的文件),然后git commit

基本上,git警告你,当你签出主分支时,它会覆盖工作目录中的所有文件 - 包括你未提交的更改。

答案 2 :(得分:0)

首先,回答你收到错误消息的原因 - 当你在git中签出一个分支时,它会更改磁盘上的文件以匹配分支的状态。这会覆盖你正在做的事情,所以它会警告你。

其次,要回答你应该怎么做 - 如果你赶时间,你可以做“git stash”,这会在你看另一个分支时暂时保存你的变化。 (你必须谷歌以后如何取消暂存。)处理它的更完整的方法是创建一个新的分支(如果我记得的话,“git checkout -b new_branch”)并在你看到master时提交你的更改。您始终可以将该临时分支拉回或合并回miscChanges并删除临时分支。

还记得git是分布式源代码控制。在推送之前,任何人都不会看到对miscChanges分支的更改,因此从技术上讲,您可以提交一些不完整的内容并在推送之前修复它,尽管您的历史记录中会有一个状态,其中您的功能不完整。如果你回到miscChanges并在完成功能时执行“git commit --amend ...”,你可以避免这种情况。

答案 3 :(得分:0)

如果您还不想提交更改,则必须对其进行操作。您可以执行git stash,更改分支,执行您需要的任何操作,然后更改回“miscChanges”分支并执行git stash apply