2011-04-16 32 views
67

可能重複:
In git, is there a simple way of introducing an unrelated branch to a repository?如何創建沒有Git的父母提交?

我有一個小項目,我工作,沒有任何形式的版本控制軟件,和我結束了三個不同版本的同一腳本,每個人做一些與其他人稍有不同的事情。我初始化的git倉庫與其中一個版本,我很想承諾每其他兩個沒有父母。這樣,我可以合併這些差異,就好像腳本的三個版本中的每一個都是不同分支的提示一樣。

我甚至不能確定這是否是一定是明智的或合理的方式去解決這個問題?如何做的事情這樣,還是建議在更好的方式來處理這種情況任何意見將是非常感激。

+2

爲什麼你不創建兩個分支並添加兩個其他版本給他們,然後在分支上工作? – manojlds 2011-04-16 22:16:35

+0

請參閱:[如何插入提交作爲第一,轉移所有其他?](http://stackoverflow.com/questions/645450/git-how-to-insert-a-commit-as-the-first-移動所有其他) – 2011-04-25 23:00:06

+2

這被稱爲* root提交*。 – 2013-01-09 19:06:43

回答

122

從我的評論:

你爲什麼不創建兩個分支,並新增兩個其他版本的他們,然後在樹枝上工作?

我認爲這也與ctcherry的答案一致。


但是,如果你真的想創造一個完全不同的「分支」,也就是無關的高手,那麼你可以用git checkout --orphan做到這一點。該manual for git checkout描述選項--orphan的工作:

創建一個新的孤兒分支,命名爲<new_branch>,從<start_point>啓動並切換到它。第一次提交這一新分支的就沒有父母,這將是一個新的歷史根源來自所有其他部門完全斷開並提交。如果你的Git是比老

git checkout --orphan version2 
git rm -rf . 
<add version2 script> 
git add your files 
git commit -m 'Initial commit for version 2' 

1.7.2(當git checkout --orphan介紹),那麼你可以在Git Community Book使用備用命令序列從「Creating New Empty Branches」

你可能會使用這樣的:

偶爾,您可能希望在存儲庫中保留不與您的普通代碼共享祖先的分支。這些的一些例子可能會生成文檔或者其他的東西。如果你想創建一個不使用當前代碼庫作爲父母的一個新的分支頭,你可以創建一個空的分支這樣的:

git symbolic-ref HEAD refs/heads/newbranch 
rm .git/index 
git clean -fdx 
<do work> 
git add your files 
git commit -m 'Initial commit' 
+6

提及'git checkout --orphan'+1 - 即使我的git 1.7.1還不支持這個。但它看起來像[Ubuntu 11.04將包含git 1.7.4](http://packages.ubuntu.com/natty/git),所以我只需要等待更多的兩週。 – 2011-04-16 23:12:07

+14

+1爲解釋爲什麼OP可能想重新考慮他們的策略,但無論如何回答這個問題,而不是說「你的方法是錯誤的」,並留在那。 – MatrixFrog 2011-04-17 01:28:13

+0

執行'git checkout'後,您還可以使用'git reset --hard'來刪除暫存的文件。 – Thai 2014-10-24 08:28:01

2

您可以創建腳本的每個版本的一個分支,並將其提交給那些個別分支機構。然後將它們一次一個合併回主。這應該有你正在尋找的效果。

+1

或者立即合併它們! – 2011-04-16 22:19:49

2

爲什麼不「空」回購啓動(例如,上述問題陳述的單一自述文件)。然後,您可以分支三次,並將不同的腳本版本添加到每個分支中,並分別提交它們。

然後,您可以分支/編輯/提交/合併,並以管理良好的方式嘗試所有選項。