2016-10-24 12 views
0

私はGitのnoobですが、私が最近開発した機能の履歴を整理することを任されました。私はこの仲間と同様の設定をhere持っています。私も同じようなことをしたいと思っていますが、私は特定のコミットにスカッシュしたいです。私のコミットがcommit1、commit2、...、commitNをしている場合たとえば、私はcommit1、commit2は、...はcommitXに押しつぶさされるようにしたいです。 コミットX + 1、コミットX + 2、...は、コミットYに潰れています。 、私の知る限り理解しスカッシュはリモートブランチ内で任意のコミットを行います

noop 

# Rebase a112005..a112005 onto a112005 (1 command(s)) 
... 

:など

私は、このコマンドで

git rebase -i origin/*branch_name* 

可能ですが、問題は、私はそのコマンドを実行したとき、私はこれを取得することをであることを理解し最後と最初のコミットはここに表示されますが、最後のコミットだけが表示されます。私は他に選ぶか、スカッシュ実行しようとすると、それは言うコミット:

error: could not apply *commit hash*... *commit message* 

明らかにそれはそれはそのメッセージを知っているのでコミット見つけたが、何らかの理由で、それも編集可能として、それを見ていないことを意味しています。どのように私はこれを修正することができます誰も考えている?また、誰かがセットアップのためのより良い端末ベースの同期システムか、自分のものを整理するためのよりよい方法をお勧めするなら、私は感謝しています。

答えて

1

リモート追跡ブランチでは何もできません。実際には、リモートトラッキングブランチを "オン"にすることはできません。 (git checkoutコマンドはgit statusのように "ブランチに"置くコマンドですが、リモートブランチブランチには置かれません)。

一般に、 Gitリポジトリで発生する場合は、 Gitリポジトリで、ブランチ名を使用して行う必要があります。

あなたが他の誰か(例えばoriginの一つとして)のGitのリポジトリに起こるために何かをしたい場合は、あなたがこれを行う方法は、まず、あなたリポジトリに設定し、すべてを取得することで、その後、git pushを使用に問い合わせて、リポジトリに作業を行い、一致するようにのいずれかを設定します。

あなたはそれら-他のリポジトリにコミットするいくつかの特定を指すように彼らのbranch-nameを設定し、 は、彼らが同意することを制御し、他のGitの、そして、その時点で、あなたを頼む場合origin/branch-nameは、同じコミットを指すように設定します。 Gitからあなたにその特定のブランチに対してその特定のコミットが使用されていると言われています。に彼らが必要とする


コミットを持っていますが、彼らはすでにそれを持っていない場合、あなたのgit pushは、まず彼らにそれを与えます。それがgit pushの仕組みです。まず、あなたの要求を受け入れるために必要ではないオブジェクトのセットを手渡します。そして、それは一連の要求の上に手:「B289abcde ...、および/またはタグセットTをコミットする1234567 ...、および/またはブランチをコミットするブランチB1を設定してください。 〜へ "。彼らのGitはこれらの要求のどれか、あるいはすべてに従って、 "ok"か "no、ここに理由がある"のいずれかを返す。

+0

その場合は、 "git rebase -i * branch_name *"を使用し、元のファイルを編集してから、 "git push"を使ってリモートブランチに保存する必要があります。 – Ilman

+0

はい:ただし、プッシュを強制的に受け入れるには、プッシュを強制する必要があります(「リース」オプションの有無にかかわらず)。これに関する他の回答を読んで、問題がどこにあるかを確認してください。それらはすべてあなたが始める前に彼らと同期してGitのレポを取得しなければならないという事実から流れ出します、そして、あなたが働いている間に再び同期を取り出すことができます。 – torek

関連する問題