我开始学习Git,不时阅读ProGit书.我听说Git最强大的功能是分支,所以我试着用它们.我正在攻击KDE项目,因此有一个远程服务器和一个本地副本.
所以这是我的情况.我编写了一个错误修正程序,但负责该代码区域的开发人员已经脱机而没有给我一个发货,所以我决定在此期间做一个不同的修复.我听说分支可以(更重要的是,应该)用于这种情况.好的,我创建了一个本地分支
git branch bugfix
Run Code Online (Sandbox Code Playgroud)
然后切换到那个分支
git checkout bugfix
Run Code Online (Sandbox Code Playgroud)
然后广告发现我修改了原始修补程序的文件仍然被修改.(当然,我需要一个干净的目录,只能在没有第一个错误的情况下推送第二个错误修复.)好吧,没问题,我想,如果那就是git status告诉我要做的那就重置一下.我做了重置,确实得到了一个干净的目录.但是嘿,我换回主人之后
git checkout master
Run Code Online (Sandbox Code Playgroud)
修改后的文件不再修改了!这是一个干净的目录.
现在分支有什么意义?不能有两个版本的文件,在一个分支中修改而在另一个分支中不修改?我知道git stash,但如果我这样做,解开更改将杀死第二个错误修复,因为IIRC存储只是将一个文件替换为另一个文件,没有合并完成.
我在这做错了什么?为什么不能在一个分支中修改文件而在另一个分支中不修改?
所以,这就是发生的事情.您从最初的开发人员开始提交A. 你修复了一些bug,现在你已经在B.有一个指向A的远程分支被调用origin/original-branch,并且有一个指向B的本地分支被调用my-changes.我不知道他们实际上叫什么(git branch -a用来列出它们).
....-> A -> B
^ ^
| +-- my-changes
|
+-- origin/original-branch
如果你在B上并且你做了一个分支并开始进行更改,你会得到这个:
....-> A -> B -> C
^ ^ ^
| | +-- bugfix
| |
| +-- my-changes
|
+-- origin/original-branch
这不是你想要的.你要这个:
+-- my-changes
v
....-> A -> B
\
-> C
^ ^
| +-- bugfix
|
+-- origin/original-branch
所以你必须让你的新分支从其他开发人员的分支开始.
git branch bugfix origin/original-branch
git checkout bugfix
Run Code Online (Sandbox Code Playgroud)
这指定新分支从其他开发人员的工作开始.如果你这样做:
git branch bugfix # not what you want
Run Code Online (Sandbox Code Playgroud)
这将导致bugfix分支从您现在的任何地方开始.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |