2016-10-22 11 views
1

私はGitコミットを数回していましたが、私がスカッシュしたい先のコミットを選ぶために手作業が必要でした。一時的なコミットをrebaseとsquashするためのGitスクリプト

これは自動的にいくつかの方法がありますか?私の目標は、特定のリモートブランチにまだプッシュされていないすべての以前のコミットをスカッシュすることです。

「dev」という1つのローカルブランチと、パブリックとプライベートの2つのリモートがあるとします。私はコミットし、私は私の個人的なリモートに、 "dev"というブランチにしたい、それをprivate/devと呼んでみましょう。しかし、公共のリモートで私は物事をきれいにして整頓し、 "master"と呼ばれる1つの標準ブランチを維持したい、それをpublic/masterと呼ぼう。私が言ったように、公衆のリモートマスター支店にまだ行っていないすべてのコミットに対して、私はそれらを1つの大きなコミットに押し込み、公開/マスターへのプッシュを行いたい。

どうすればいい?複雑に思えます。

+0

https://robots.thoughtbot.com/autosquashing-git-commits – Yawar

答えて

3

あなたは、単にpublic/masterを経由して、一時的なブランチを作成

( - - 例えば、あなたの公開リモートの名前であることpublic、およびmasterで先の枝である)そして、あなたは(「In git, what is the difference between merge --squash and rebase?」を参照)merge --squashを使用

git checkout -b temp public/master 
git merge --squash dev 
# since merge --squash does not produce a commit: 
git commit -m "squash dev" 
git push public temp:master 
git checkout dev 
git branch -d temp 

コロン構文については、「git push branch to a new repo with a different name」とexamples section of git pushを参照してください。
ローカルブランチを別の名前のリモートブランチにプッシュすることができます。

+0

こちらをご覧ください。各ステップ/コマンドで正確に何が起こっているのかを詳しく教えてください。私が実際には –

+0

に従っているかどうか確かではないが、マージ結果にコミットメッセージを与えることができますか?public/masterの最新バージョンを見たときに使用されますか? –

+0

また、 "git push public tmp:master"とは何ですか?コロンの構文は何を意味していますか? –

関連する問題