如何从master分割出一个分支

时间:2012-06-22 13:48:42

标签: git version-control

向所有人致意,

我的回购有点奇怪。初始我只有分支提交,但是在我完成应用程序的功能版本后,我决定创建一个 develop 分支继续开发但是保留工作版本在 master 中未触及,直到我想合并它为止。

目前(使用gitk --all)我的git日志图如下所示:

                             tag 
                              |
*----*-----*-----*-----*------*------*------*         master & develop
                                     \       \
                                      --------*----*  develop (HEAD)

我不确定我为此做了什么,下面是我为创建 develop 分支所采取的步骤:

$ git checkout develop
$ vim example.txt
$ git add .
$ git commit -m "first file in develop"
$ git push origin develop 

在此之后,我开始研究开发分支,直到我看了 gitk

我想要的(并认为是使用git分支的正确/健康方式)是:

                            tag
                             |      
*----*-----*-----*-----*-----*-----*               master
                                    \
                                     *-----*-----* develop (HEAD)

我需要做些什么才能使我的回购看起来与上图相似?

编辑#1:

来自git reflog的输出 develop

54d8daf HEAD@{0}: reset: moving to HEAD@{15}
45dcaa7 HEAD@{1}: rebase finished: returning to refs/heads/develop
45dcaa7 HEAD@{2}: rebase: added another sanity check for cli parameters
f3b0f8b HEAD@{3}: rebase: I am working on getting the console improved, this including better color, and more cammand options
8c48bab HEAD@{4}: checkout: moving from develop to 8c48babb10ec2f8f28f364ce57b5095cb080c133^0
54d8daf HEAD@{5}: checkout: moving from master to develop
8c48bab HEAD@{6}: checkout: moving from develop to master
54d8daf HEAD@{7}: rebase: aborting
3bf3f64 HEAD@{8}: commit: rebase
6aa82d8 HEAD@{9}: rebase: added another sanity check for cli parameters
a9be651 HEAD@{10}: rebase: I am working on getting the console improved, this including better color, and more cammand options
8c48bab HEAD@{11}: checkout: moving from develop to 8c48babb10ec2f8f28f364ce57b5095cb080c133^0
54d8daf HEAD@{12}: rebase: aborting
7890b76 HEAD@{13}: rebase: added another sanity check for cli parameters
46847d7 HEAD@{14}: rebase: I am working on getting the console improved, this including better color, and more cammand options
8c48bab HEAD@{15}: checkout: moving from develop to 8c48babb10ec2f8f28f364ce57b5095cb080c133^0
54d8daf HEAD@{16}: commit: changed the how function, it seems I was right, wc counts all lines regardless of readable symbols or not.
13d35ed HEAD@{17}: commit: am working on the how function (should be trivial, but I have a bad feeling)
852fb68 HEAD@{18}: commit: I have added some more commands (thought not fully implemented), but more specifically I have changed the pattern matching
33dfc9f HEAD@{19}: commit (merge): change some output settings, asthetics and such. I am working on getting more command options for list previous lin
a248465 HEAD@{20}: commit (amend): added another sanity check for cli parameters
f0ca508 HEAD@{21}: commit (amend): added another sanity check for cli parameters
9e24e91 HEAD@{22}: commit: added another sanity check for cli parameters
0194cab HEAD@{23}: commit: I am working on getting the console improved, this including better color, and more cammand options
8c48bab HEAD@{24}: checkout: moving from master to testing
8c48bab HEAD@{25}: commit: I think I have wroked out all of the import bugs, the rest is really just esthetics, welcome version 1
b306d9f HEAD@{26}: commit: as it turns out it was easier then I thought, plus I fixed an incorrect append method
8445a25 HEAD@{27}: commit: seems I miss understood how bash case statments handles regex, or should I say pathname expansion matching
9fc5132 HEAD@{28}: commit: lol, totally forgot to use the function 'run' to get things going
ee2a2c7 HEAD@{29}: commit: seems I haven't yet figured out how to correctly parse cli args...
bb0fd28 HEAD@{30}: commit: fixed incorrect sanity check
eb3db1d HEAD@{31}: commit: have reached a stage I could refer to a working test system, which is what I am going to do.
4bfd53b HEAD@{32}: commit: added a lot more colours (am using a list from arch-wikis), incorporated much better error handling
2d9b598 HEAD@{33}: commit: getting there part 1
0edfcae HEAD@{34}: commit: output functions so far
06130a7 HEAD@{35}: commit: modularized two printing function into a seperate script
e0033b8 HEAD@{36}: commit (initial): used some functions from previous bash script, maybe I should create a generic script for text output...?

错误的是,我试图做一个rebase,每次合并尝试都失败了。在不同的文件签出(git diff--theirs)上使用--ours显示远程和本地之间没有区别。所以我重新设置回来提交HEAD@{15}

编辑#2: 对于我可能造成的混乱,我感到很遗憾,但是在图1中,'master& amp; develop'表示两个分支( master develop )合并为一个“stream”。我希望这更有意义。

编辑#3:

git log master --pretty=oneline

的输出
8c48babb10ec2f8f28f364ce57b5095cb080c133 I think I have wroked out all of the import bugs, the rest is really just esthetics, welcome version 1
b306d9f58c3ebab03364c4381754bc87db9e7f2d as it turns out it was easier then I thought, plus I fixed an incorrect append method
8445a258fc388eba5b920de57b1f390623da87a0 seems I miss understood how bash case statments handles regex, or should I say pathname expansion matching
9fc5132c30bdf2ab143ad046493326ba63e4300d lol, totally forgot to use the function 'run' to get things going
ee2a2c7ff69498a80e9fc5f36cc340f6e1b95bcb seems I haven't yet figured out how to correctly parse cli args...
bb0fd28c89a0c16c379774b7fc5768a4160d6852 fixed incorrect sanity check
eb3db1d055b45793fb9a3fd5f884926687f7b8dd have reached a stage I could refer to a working test system, which is what I am going to do.
4bfd53b3af85d82aea11871a0ddb7f9d583cfb73 added a lot more colours (am using a list from arch-wikis), incorporated much better error handling
2d9b598d77e2b62611dfd2e42b183d0262880014 getting there part 1
0edfcae88e6eae66de4fae1788433d83b90a1c37 output functions so far
06130a7288ce26b4a2235864f7cd5b48a35dcea6 modularized two printing function into a seperate script
e0033b8f440f2ffb7b9a120f5a9be9ea167e1e30 used some functions from previous bash script, maybe I should create a generic script for text output...?

git log develop --pretty=oneline

的输出
54d8daf475a5e1108cd6345850245db2d0e6fd80 changed the how function, it seems I was right, wc counts all lines regardless of readable symbols or not.
13d35ed979de3518eca26961f3be4bb0b7d8de03 am working on the how function (should be trivial, but I have a bad feeling)
852fb68b8ca929e1156e38e2a58a12f07bd9aaa5 I have added some more commands (thought not fully implemented), but more specifically I have changed the pat
33dfc9f187a54dc7234c9ca31bee91eef7c89a98 change some output settings, asthetics and such. I am working on getting more command options for list previo
a2484654eff741f4c625f8cb097fbb92f6ac8b9b added another sanity check for cli parameters
9e24e9157157f128f75b3d7859875d06d33137bd added another sanity check for cli parameters
0194cab8af66656bb9fe83c919409354f6d12edc I am working on getting the console improved, this including better color, and more cammand options
8c48babb10ec2f8f28f364ce57b5095cb080c133 I think I have wroked out all of the import bugs, the rest is really just esthetics, welcome version 1
b306d9f58c3ebab03364c4381754bc87db9e7f2d as it turns out it was easier then I thought, plus I fixed an incorrect append method
8445a258fc388eba5b920de57b1f390623da87a0 seems I miss understood how bash case statments handles regex, or should I say pathname expansion matching
9fc5132c30bdf2ab143ad046493326ba63e4300d lol, totally forgot to use the function 'run' to get things going
ee2a2c7ff69498a80e9fc5f36cc340f6e1b95bcb seems I haven't yet figured out how to correctly parse cli args...
bb0fd28c89a0c16c379774b7fc5768a4160d6852 fixed incorrect sanity check
eb3db1d055b45793fb9a3fd5f884926687f7b8dd have reached a stage I could refer to a working test system, which is what I am going to do.
4bfd53b3af85d82aea11871a0ddb7f9d583cfb73 added a lot more colours (am using a list from arch-wikis), incorporated much better error handling
2d9b598d77e2b62611dfd2e42b183d0262880014 getting there part 1
0edfcae88e6eae66de4fae1788433d83b90a1c37 output functions so far
06130a7288ce26b4a2235864f7cd5b48a35dcea6 modularized two printing function into a seperate script
e0033b8f440f2ffb7b9a120f5a9be9ea167e1e30 used some functions from previous bash script, maybe I should create a generic script for text output...?

git log master...develop

的输出
commit 54d8daf475a5e1108cd6345850245db2d0e6fd80
Author: Hans 
Date:   Thu Jun 21 21:27:14 2012 +0200

    changed the how function, it seems I was right, wc counts all lines regardless of readable symbols or not.

commit 13d35ed979de3518eca26961f3be4bb0b7d8de03
Author: Hans 
Date:   Thu Jun 21 21:09:44 2012 +0200

    am working on the how function (should be trivial, but I have a bad feeling)

commit 852fb68b8ca929e1156e38e2a58a12f07bd9aaa5
Author: Hans 
Date:   Thu Jun 21 20:58:16 2012 +0200

    I have added some more commands (thought not fully implemented), but more specifically I have changed the pattern matching slightly, it is now a r

commit 33dfc9f187a54dc7234c9ca31bee91eef7c89a98
Merge: a248465 9e24e91
Author: Hans 
Date:   Thu Jun 21 20:42:56 2012 +0200

    change some output settings, asthetics and such. I am working on getting more command options for list previous lines and such

commit a2484654eff741f4c625f8cb097fbb92f6ac8b9b
Author: Hans 
Date:   Thu Jun 21 20:23:52 2012 +0200

    added another sanity check for cli parameters

commit 9e24e9157157f128f75b3d7859875d06d33137bd
Author: Hans 
Date:   Thu Jun 21 20:23:52 2012 +0200

    added another sanity check for cli parameters

commit 0194cab8af66656bb9fe83c919409354f6d12edc
Author: Hans 
Date:   Thu Jun 21 20:06:02 2012 +0200

    I am working on getting the console improved, this including better color, and more cammand options

3 个答案:

答案 0 :(得分:1)

您可以对任何分支使用reflog:git reflog查看该引用的历史记录,然后只需使git reset --hard HEAD@{INDEX_HERE}还原该分支的更改。

第一张图显示了在master分支中进行提交然后在develop分支中创建git pull的情况。 git pull会将跟踪分支(主分支)合并到当前分支(开发)中。

如果您可以发布分支主机和开发的reflog,那么我们可以检查它。

答案 1 :(得分:1)

  
    

我需要做些什么才能使我的回购看起来与上图相似?

  

要从'master'创建分支'develop',我会按照git manual中的说明进行操作:“要创建分支并同时切换到它,可以运行git checkout命令使用-b开关“。

在你的情况下,Hans,你可以做以下事情(假设'master'在遥控'起源'):

# checkout and pull latest from master
git checkout master
git fetch origin
git pull origin master

# create the develop branch
git checkout -b develop

现在'master'和'develop'分支是截然不同的,未来的提交应该使你的提交历史看起来像你想要实现的正确/健康的图表。

答案 2 :(得分:0)

事实证明,我误解了分支在git中是如何工作的。这是 基本问题。 我的回购设置如何设置没有任何问题

然而正如亚历山大向我指出的那样,a248465 9e24e91有一个异常合并,从而创造了这个双重提交'如图1所示。这些提交实际上是相同的提交但具有不同的SHA1哈希值。我认为这是因为我错误地应用了git commit --amend

删除它们的解决方案是重新定义 develop 分支并从历史记录中删除提交9e24e91

感谢大家的帮助!