我有一个Git存储库,我已经开始在 master 分支上开发了,现在我相信master不应该是一个长期运行的分支。和其他人一样,我认为master branch总是拥有稳定的产品。
所以,我想打开一个名为 develop 的新分支,该分支将是一个长期运行的开发分支,但我不确定在这里切换的最佳方法是什么。我目前的解决方案是:
打开新分支并将其推送到GitHub:
git checkout -b develop
git push origin develop
然后返回master分支并停止跟踪除 README.md 之外的所有文件并将其推送到远程存储库(在本例中为GitHub):
git checkout master
git rm . --cached -r
git add README.md
git commit -m "cleaned up the master branch"
git push origin master
你有什么想法?
答案 0 :(得分:2)
您的问题出在NAME“master”上。
分支是分支。它们中没有一个比任何其他都重要。这个名称实际上只是一个标签 - 一个标识当前HEAD的字符串,并且在HEAD被提交的顶部突然出现。但是分支的“主” - 唯一重要的是因为git这个名称给出了它在项目中创建的第一个分支。但那只是只是一个名字。让我们把你当前的主分支给它一个新的名字。因为你所谓的无关紧要,让我们选择“史蒂夫”。
git branch -m master steve
大。现在你没有主分支了!但是你有一个古老的史蒂夫分支,其中有历史作品。这是值得拥有的,但是因为你现在正在历史上画出一条线,你可能永远不会再陷入其中。
然后检查你的开发分支,继续工作等等。当它稳定时(无论你的具体情况如何),创建一个新主人
git checkout -b master
哈哈!该主分支的第一次提交是稳定的,您可以确保所有未来的提交也是如此! (顺便说一下,你需要 - 从开发到主服务器的所有合并中的no-ff,以保持那些中间可能不稳定的提交从你闪亮的新“主”分支中。)
答案 1 :(得分:1)
这根本不是分支在Git中如何运作的。没有理由从master
中删除所有文件,实际上,这会使master
完全无用,以便以后合并。您将迫使master
和develop
分支机构以基本方式发生分歧。
只需检查您的develop
分支机构,然后在那里进行开发工作。当它被视为“稳定”时,请结帐master
和git merge develop
以使您的稳定代码成为主人。然后推两个分支。
您还应修改git push origin develop
以包含-u
自动--set-upstream
develop
分支,以便您推送和撤消更改:
git push -u origin develop
作为Dan Ray's answer的附录,如果你真的想追溯master
使git merge --no-ff develop
空,直到你master
,你需要摧毁主人,(现在或当你准备好时) merge)重新创建它以指向repo中最早的提交。然后develop
和develop
会在最早的时刻发生分歧,并且它们可以合并,从而产生“主人总是稳定”的错觉:
git checkout -b develop
分行:master
git branch -d master
:git log
git branch master <early commit id>
git checkout master && git merge --no-ff develop
现在,您的主分支“始终”为空,直到您的开发代码合并为止。
答案 2 :(得分:0)
听起来您要做的就是为develop
创建新的master
分支,为this answer创建How to insert a commit as the first, shifting all the others?。
假设您有以下历史记录:
$ git --version
git version 1.7.9.rc2.1.g69204
$ git log --oneline --decorate --all
3047e68 (HEAD, master) D
d5b5fdb C
4a26775 B
c53013b A
2a984b8 initial
从develop
分支创建一个新的master
分支:
$ git branch develop
$ git log --oneline --decorate --all
3047e68 (HEAD, master, develop) D
d5b5fdb C
4a26775 B
c53013b A
2a984b8 initial
创建一个新的初始提交并按照您的喜好进行设置:
$ git symbolic-ref HEAD refs/heads/newroot
$ git rm --cached -r .
$ git add README.md
$ git clean -f -d
$ git commit -m 'new initial'
$ git log --oneline --decorate --all
8b9881c (HEAD, newroot) new initial
3047e68 (master, develop) D
d5b5fdb C
4a26775 B
c53013b A
2a984b8 initial
现在使newroot
develop
分支和新的初始提交master
分支:
$ git rebase --onto newroot newroot develop
$ git branch -d newroot
$ git log --oneline --decorate --all
3d589b6 (HEAD, develop) D
f6a83da C
6c8bdc9 B
f8dd99f A
79706b0 initial
8b9881c new initial
3047e68 (master) D
d5b5fdb C
4a26775 B
c53013b A
2a984b8 initial
现在,在您确定要删除现有的master
历史记录并使new initial
提交master
的{{1}}之后:
HEAD
当$ git reset --hard 8b9881c
HEAD is now at 8b9881c new initial
$ git log --oneline --decorate --all
3d589b6 (develop) D
f6a83da C
6c8bdc9 B
f8dd99f A
79706b0 initial
8b9881c (HEAD, master) new initial
分支稳定并准备好develop
时:
master