为什么一个分支中的更改在另一个分支中可见?

时间:2017-11-24 10:36:22

标签: git git-commit git-add

我执行以下命令序列:

<img alt="Figura 6.1b" src="fig/figura-06-01-b.jpg"/>

作为这些命令的结果,我看到了

git init rep
cd rep/
echo '111' > 1.txt
git add 1.txt 
git commit -m '1'
git checkout -b dev
echo '222' > 1.txt 
git checkout master
more 1.txt 

我不明白为什么。正如你所看到的,我创造并进入了开发阶段。科。我在那里做了一些更改,但我没有添加,也没有提交它们。为什么从'dev&#39;回去后呢?到#&#39;掌握&#39;我确实看到了我在'dev&#39;中所做的改变他们不应该留在dev中,直到我添加,提交并将它们合并回master?

6 个答案:

答案 0 :(得分:3)

git checkout -b dev
echo '222' > 1.txt 
git checkout master

您在上述行中的1.txt文件上操作的更改不在任何分支上,因为它们未提交(它们甚至未添加到索引中)。

Git分支只是一个提交指针。当您将分支从dev更改为master时,您实际上并未更改当前已检出的提交。这就是为什么Git不需要在工作树中更新索引或1.txt的内容。

答案 1 :(得分:1)

按照其他人的指导,要么提交您的更改,要么保存它们。一种简单的解决方案是在结帐之前存储您的更改(即临时保存)。例子

git checkout -b dev
echo '222' > 1.txt 
git stash
git checkout master
# on return to dev, restore changes via following
git stash pop

现在您处于文档的旧状态。

答案 2 :(得分:0)

这是因为您没有将更改提交给分支dev。因此,未提交的更改尚未与父提交绑定。

待办事项

git checkout dev
git add .
git commit -m "changed 1.txt"

如果要删除更改,请执行

git reset --hard master

修改

dev和master分支指向相同的提交哈希。查看文件夹.git / refs / heads内部,这是分支存储在单独文件中的位置。内容是特定分支指向的提交哈希。所以分支只是指向提交的指针。

在您签出master或dev的特定情况下,它们都指向相同的提交,因此操作不会更改工作树。否则你会收到错误。现在尝试在dev分支上更改某些内容,然后在git checkout master

时出现错误

答案 3 :(得分:0)

当您在不同分支之间移动时,所有未跟踪的文件都不会受到影响。由于它们属于您的文件系统,因此GIT不知道这些文件属于哪个分支。因此,当您提交这些文件时,GIT会知道哪些文件属于哪个分支。并且可以根据您的分支删除或添加工作区中的文件。

答案 4 :(得分:0)

我也遇到了同样的事情,但是添加和提交文件没有帮助。然后我发现,在使用checkout -b在本地创建分支之后,我还必须远程推送分支:

git push origin [name_of_your_new_branch]

答案 5 :(得分:0)

  1. git checkout branch2 ,您进行修改的地方。

  2. git add .

  3. git commit -m "message"

  4. git push -u origin branch2

检查本地存储库,您将仅在 branch2 中看到修改,而不会在 master 分支中看到。您的主分支将不受影响。