1

小さな Rails 3 アプリをまとめて、私が取り組んでいるライブラリでどのように使用できるかを示しました。実行後rails new、Gemfile、config、およびいくつかのクラスにいくつかの変更を加えました。次に、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リポジトリに抽出するためgit rebase --ontoに使用することにより、既存のリポジトリ内でそれを行うためのやや複雑な方法があると確信しています...しかし、あなたの履歴git filter-branchはとても簡単ですか?:-)

于 2011-06-10T18:46:14.780 に答える
0

私は通常、この種のことにブランチを使用します。新しい空のブランチを作成し、その中で新しいレールを作成し、コミットしてから、元のブランチをその上にマージします。

于 2011-06-10T17:55:43.243 に答える
0

リポジトリが公開されているかどうかによって異なります。提案されたリベースは、リポジトリの履歴を完全に書き換えます。これがまだプライベート リポジトリである場合は、トランクとブランチをリベースで自然に修正し、最終的にgit gcは古い履歴を削除します。他の人があなたの既存の作業を複製し、その上に独自の変更をコミットした場合、この履歴の書き換えは混乱し、迷惑になります。

あなたが提案するように、私は以前に最初のリビジョンを置き換えたことはありません。新しい基本リビジョンをコミットしてから、 を使用git filter-branchして古い最初のリビジョンの親を新しい最初のリビジョンにリセットすると、より良い結果が得られる場合があります。のアルゴリズムはgit rebase、状況に対応できない場合があります。に例がありgit help filter-branchます。

于 2011-06-10T18:01:08.293 に答える