如何在GitHub中“重新开始”?


14

我计划使用另一个框架等完全重写我的项目。保留旧代码(包括历史记录)作为参考会很好。避免风险,混乱和意外的最佳方法是什么?

我的想法是创建一个新分支,在那里替换所有内容并在那里运行基本的“新”版本,标记最后一个“旧”母版,然后将该分支合并到母版中。听起来合理吗?


18
这个问题似乎与Git有关,而不与Github有关。
user253751 '16

如果您不打算编辑旧代码,只需希望它可以轻松查看即可使用标记。但是标签应该是不可变的(但是您始终可以删除,重新添加)。
特拉维斯

2
创建一个新的存储库。
CodeGnome

Answers:


15

我投票赞成将所有内容都保存在一个存储库中。

我会:

  1. 创建一个新分支以指向您的旧代码
  2. 删除所有代码并提交给master
  3. 在master上开始重写。

这是这样的:

# checkout the master branch
git checkout master

# create a new branch so you can find the old code easily
git branch oldStuff-KeepingForReference

# push the branch to github
git push origin oldStuff-KeepingForReference

# You currently have the master branch checked out
# so now cd to the project root and start your rewrite: 
cd <your project root>
rm -rf *

# Create a commit of the delete
git add --all *
git commit -m "Fresh start"

# Start your rewrite
echo "Some changes" > file.txt
git add file.txt
git commit -m "This is the first commit of the rewrite"

另外:如果您永远不会向其添加任何提交,也可以对旧的旧代码进行标记。

当您应该创建一个新的存储库而不是这样做时:

  • 当您当前的存储库过大而克隆存储库的速度很慢时。您可能要考虑使用新的存储库。

8

除非有紧迫的理由合并重写分支和历史分支,否则我将它们分开。创建一个新分支以保留旧代码,在master中进行重写,并以这种方式使它们分开。这样,如果情况发生变化,您始终可以使用旧的框架/实现。


3

那就是孤立分支的目的。

git branch -m master new_branch       #rename the branch
git push origin new_branch:new_branch #push the old code
git push origin :master               #delete the origin/master branch containing the old code
git checkout --orphan master          #create a new orphane branch - master. The first commit made on this new branch will have no parents and it will be the root of a new history totally disconnected from all the other branches and commits.

echo foo > file.txt
git add file.txt
git commit -m 'init commit'
git push origin master

您可能需要暂时在Github 中将默认分支设置为new_branch因为默认情况下它显示为master。


2

您可以在当前项目中创建一个新分支,但最好将存储库标记为私有,然后为新代码创建一个新分支,这样您仍然拥有旧的存储库,但不会因过时的工作而肿。

我建议您采用这种方法,而不是稍后尝试将分支合并回master,这不仅是因为您仍然会从过时的代码中浮出水面,而且还因为准备就绪时可能会有一些令人沮丧的合并冲突。做拉。为了避免这种情况,最好从一个清晰的分支开始,而不是将两个完全不同的分支合并在一起。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.