1

我组装了一个小型 Rails 3 应用程序来演示如何将它与我正在开发的库一起使用。运行后,rails new我对 Gemfile、配置和一些类进行了一些更改。然后我致力于 git。

我应该做的是提交最初生成的结构,然后提交我的更改,以便我可以很好地了解这个库的最小设置。

在我完成所有重新设置这一切的步骤之前(可能像 30 分钟,但可能会导致错误),我想知道:是否有可能做另一个rails new,提交,然后将现有的提交重新设置为基础,产生一个只提交我之前所做的更改(即减去rails new生成的结构)?

如果我了解 git 如何正常工作,这似乎是可行的,但我确定我不知道如何使用 git 的命令。

4

4 回答 4

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>
于 2011-06-10T19:18:52.907 回答
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 存储库中......但是为什么要打扰你的历史就这么简单?:-)

于 2011-06-10T18:46:14.780 回答
0

我通常使用分支来处理这类事情。创建一个新的空分支,在其中做新的 rails,提交它 - 然后将原始分支合并到它上面。

于 2011-06-10T17:55:43.243 回答
0

这取决于您的回购是否公开。您提议的 rebase 将完全重写存储库的历史记录。如果这仍然是一个私人仓库,您自然会修复您的主干和任何带有变基的分支,最终git gc将删除旧的历史记录。如果其他人克隆了您现有的工作并在其之上提交了他们自己的任何更改,那么这种历史重写将使他们感到困惑和烦恼。

我从来没有像你提议的那样替换过第一个修订版。通过提交新的基本修订版,然后使用git filter-branch将旧的第一个修订版的父级重置为新的第一个修订版,您可能会获得更好的结果。的算法git rebase可能无法应对您的情况。中有一个例子git help filter-branch

于 2011-06-10T18:01:08.293 回答