git - 如何从 master 中分离出一个分支

标签 git version-control

大家好,

我的仓库有一个有点奇怪的问题。最初,我只有 master 分支要提交,但是在完成应用程序的功能版本后,我决定创建一个 develop 分支来继续开发,但保留工作版本在 master 中保持不变,直到我想要 merge 它。

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

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

I am unsure as to what I did to cause this, below are the steps I took to creating the develop branch:

$ 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)

What do I need to do to get my repo to look similar to the diagram above?

EDIT #1:

Output from git reflog for 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 ,但每次 merge 尝试都失败了。在不同的文件 checkout (--theirs--ours)上使用 git diff 显示远程和本地之间没有差异。因此,我将 head 重置回提交 HEAD@{15}

编辑#2: 对于我可能造成的困惑,我深表歉意,但是在图 1 中,“master &development”表示两个分支(masterdevelop)被组合成一个“溪流'。我希望这更有意义。

编辑#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 logdevelop --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

最佳答案

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

第一个图显示了当您在 master 分支中进行提交,然后在开发分支中进行 git pull 时的情况。 git pull 会将跟踪分支(master) merge 到当前分支(develop)中。

如果您可以发布分支 master 和development 的引用日志,那么我们可以检查它。

关于git - 如何从 master 中分离出一个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11157479/

相关文章:

c# - 连接到 git 的 .NET 的项目结构和构建系统

git - Team Foundation Server 和 Team Services 之间的区别

git - 使 git status 显示未修改/未更改的跟踪文件?

java - 使用版本控制很好地重构

git - 将 Bonobo Git 服务器与 VS 2015 社区版集成

git squash 为公共(public)服务器提交,但为私有(private)服务器保留详细的提交

git - 在 github 上管理发布

linux - Linux 中 NTFS 分区上的 Subversion (svn) 存储库?

java - 忽略责备结果,因为提供程序返回了 120 个责备行,但文件 some.java 对于 CVS Sonar 有​​ 226 行

github - 从另一个分支更新 github 分支