0

私は怠け者で、すべてのコミットを master ブランチに入れています。私が今やりたいことは、このガイドが言うように私の git リポジトリを構築することです: http://nvie.com/posts/a-successful-git-branching-model/

今やりたいことは、master のすべてのコミットを master-cleanup という新しいブランチに移動することです。次に、master-cleanup を master とマージして、master にコミットが 1 つだけになるようにします。これを行う理由は、マスターのすべてのコミットが多くのスペースを占有するためです。すべてのコミットをクリーンアップ ブランチに移動すると、ローカル マシンでそのブランチを削除して、サーバー。このように、マスター ブランチをチェックアウトすると、すべての履歴ではなく、最新のコミットのみがダウンロードされますよね?

最初に新しいブランチを作成してから、マスターを最初のコミットにリセットしてこれを実行しようとしました。その後、no-ff で master-cleanup とマージします。

git branch master-cleanup
git reset --hard 4f8d90cc225288bf889090f80103cfa0887a4742
git merge --no-ff master-cleanup

これにより、すべてのコミットが新しい master-cleanup ブランチに移動されると思いましたが、マージを実行すると、すべてのコミットもインポートされます。--no-ff はこれを防ぎ、マージをマスターへの新しい単一のコミットに強制すると思いましたか? ここで、コミット ログ全体と新しいマージ コミットを git します...

私がやりたいことを解決する方法についてのアイデアはありますか?

4

3 に答える 3

1

--no-ff早送りしないことを意味します。これにより、マージされたブランチがトップに直接続く場合でも、2 親マージ コミットが確実に取得されます。そうしないと、マージされた一連のコミットが一緒に属しているというヒントなしに、線形の履歴を取得するだけです。

コミットを使用するものに融合するmerge -- squashか、既に存在する場合は、rebase -isquash を使用して尋ねることができます。またはreset --softより低い点で、インデックスをコミットします。


質問の他の部分に関しては、歴史は確かにいくらかのスペースを占めますが、ソースのサイズで言及する価値はほとんどありません. また、過去の作業に興味がない場合は、レポをそのままにしておいてください。それの浅いクローンを作成するだけです。を読んでくださいgit clone --depth 1。練習に使用しなくても、そのようなクローンを作成してサイズの違いを確認し、いじる価値がないと判断できます。

于 2013-06-27T08:39:34.793 に答える
0

--squashを指定する必要がありますgit merge。詳細については、これこの回答を参照してください。

于 2013-06-27T08:06:58.277 に答える
0

新しいブランチを作成する必要はありません。これを行うには多くの方法があります。まずこれをはっきりさせてください。すべてのコミットを 1 つのコミットにマージしたいとします。これはあなたの問題です。

これらのコマンドを試してください

git log --oneline //Show all your commits. (Note down the SHA of your first commit)
git rebase --interactive 22dacee where 22dacee is the SHA you noted in above step.

ここで、エディターがポップアップし、次のようなものが表示されます

pick aasad23 X
pick a434fsa Y
... a long list follows.

# Rebase adrtec..ds3452 onto adrtec
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.

ここで、最初のpick単語を除くすべての単語を に置き換えます。sそして、ファイルを保存します。新しいエディターが再びポップアップし、マージされるコミットが表示されます。もう一度確認して、もう一度保存してください。コミットが 1 つだけになることがわかります。

于 2013-06-27T08:38:10.693 に答える