2011-06-10 47 views
1

我整理了一個小型的Rails 3應用程序來演示它如何與我正在使用的庫一起使用。在運行rails new之後,我對Gemfile,config和一些類進行了一些更改。然後,我承諾要git。Git:我忘了做一個生成代碼的初始提交;這是rebase的工作嗎?

我應該做的是提交最初生成的結構,然後進行更改,以便我可以很好地區分此庫的最小設置。

在我再次完成所有設置步驟(可能是30分鐘,但可能導致錯誤)之前,我想知道:是否有可能執行另一個rails new,提交併重新綁定現有的提交到那個,只是我剛纔做的改變(即減去rails new生成的結構)產生一個提交?

如果我理解git如何正確工作,這似乎是可行的,但這不是我敢肯定我知道如何處理git的命令。

回答

0

我通常在這種事情上使用分支機構。創建一個新的空分支,做新的軌道,提交 - 然後合併原始分支。

+0

這將無法正常工作;該分支的母公司將成爲修改後的項目。沒有什麼可以合併的。 – meagar 2011-06-10 18:52:41

0

這取決於您的回購是否公開。你提出的rebase將會完全重寫版本庫的歷史。如果這仍然是一個私人回購,你會自然修復你的樹幹和任何分支與rebase和最終git gc將刪除舊的歷史。如果其他人克隆了你現有的工作,並在其上面做了任何自己的改變,這段歷史改寫會讓他們感到困惑和煩惱。

我從來沒有取代第一個修改之前像你建議的。通過提交新的基本修訂,然後使用git filter-branch將舊的第一個修訂的父母重置爲新的第一個修訂,可能會獲得更好的結果。 git rebase的算法可能無法應付您的情況。在git help filter-branch中有一個例子。

+1

如果我的答案的某些部分不準確告訴我,所以我可以學到一些東西! – 2011-06-10 20:00:36

1

在你的情況,因爲你的回購協議是一種全新/簡單,最容易做的事情將是剛剛創建一個新的回購,做rails new那裏,然後在複製的更改:

mkdir tmp; cd tmp; git init; rails new my_app; git add .; 
git commit -m 'Initial commit of rails new' 
rm -Rf ~/my_app/.git 
cp -R ~/my_app/* ./ 
git add . 
git commit -m 'Set up some settings in Gemfile, config, etc' 

Git處理文件內容(SHA1哈希),所以這種方法是完全有效的。

我敢肯定,在現有的回購協議中有一種半複雜的方式,可能是通過創建一個新的臨時分支git rebase --onto,然後使用git filter-branch將臨時分支提取到新的git回購中。但是當你的歷史如此簡單時,爲什麼要打擾呢? :-)

2

您最初提交後,請嘗試以下操作:

git checkout -b temp 
<do the rails new> 
git add . 
git commit --amend 
git rebase --root --onto temp master 
<resolve conflicts and git add and git rebase --continue> 
相關問題