2017-07-12 4 views
0

私のシナリオがありGitHubリポジトリと同等です。他のユーザーは排他的にSVNを使用していますが、私は唯一のgit + SVNユーザーです(これは単純化しています)。私はpullの前にgit svn dcommitを作ったのですが、どうすれば私のレポを修正できますか?</p> <ul> <li>私のローカルマシンのgitレポ</li> <li></li> <li>アンSVNサーバLAN</li> </ul> <p>SVNサーバ上のGitHub上のリモートはまだ正規のですが、保たれている:

私はgitを使用して、GitHubリポジトリを使用して自分のコミットをプッシュ/プルして、他のコンピュータ(例:ラップトップ、自宅、海外)で作業しています。私がオフィスに入るまで私のコミットはSVNに入れられません。新しくSVN-注釈を付けてバックのGitHubにgit push -f続い

私はオフィスにいるとき、私は持っ-にするためにGitHubのからの新しいコミットその後、git svn dcommitを行うgit pullをやるには、GitHubのマッチにキヤノンになるコミット完全にSVN。

しかし、今日私のオフィスコンピュータにはコミット中のコミットがいくつかありましたが、非コミットコミットもありましたが、修正方法はわかりません。 anyhere任意のコマンドを実行する前に、私のレポはこのように見えた午前9時

今朝、:

o = Normal Git commit, lacking SVN annotation 
* = SVN-annotated Git commit 

GitHub 
*---*---*---*---o---o---o---o---o 
A B C D E F G H I 

Local computer git repo 
*---*---*---*---o---o 
A B C D E F 

SVN 
*---*---*---* 
A B C D 

説明:私は、以前から引き出された私のローカルコンピュータのレポにあった2つのコミット、EFを持っていましたGitHub、これらのコミットはまだdcommit 'd to SVNではありませんでした。

今朝私はローカルコンピュータ上ですぐにgit svn dcommitを実行したので、最初にgit pullを実行せずにミスを犯しました。 git svn dcommitを実行すると、レポはこの状態に入る原因:彼らはコミットSVN-注釈付きであることをgit svnによって変更されている(それは別のコミットハッシュを持っているので、EFは今E'F'であることを

GitHub 
*---*---*---*---o---o---o---o---o 
A B C D E F G H I 

Local computer git repo 
*---*---*---*---*---* 
A B C D E' F' 

SVN 
*---*---*---*---*---* 
A B C D E' F' 

注意、同じコードベース状態を表すにもかかわらず)。私の元のEFは、GitHubでは変更されません。

:私は今、GitHubのは自分のコンピュータ上で Iを通じて Eをコミットし、GitKraken私は今 Dをコミットした後に発散サイド・バイ・サイド枝を持っているかを私に示していて

マイコンピュータはとにかくバックグラウンドでgit fetchを行います

Local computer git repo: 

*---*---*---*---*---* (master) 
A B C D E' F' 
      \ 
       \-o---o---o---o---o (remote-master) 
       E F G H I 

どうすればこの問題を解決できますか? (Git-SVNの注釈付きコミットは事実上不変です)。

私はgit svn dcommitを実行し、バックのGitHubにgit push -fを行い、その後、私がやりたいことはF'後の親の変更GあるのでEFを無視すると思います。

...問題は、私は復讐する方法を知らないG - 私はcherrypickのようなコマンドを見ているが、それは私が後になっているようには見えないし、GitKrakenは私をさせませんrebase(それはメニューではありませんブランチremote-master内のものはオプション)。

答えて

0

コマンドラインを使用できますか?

git rebase F I --onto master 

e.e.e.リベースは、Fを含まない(Fを含まない)からIまで(Iを含む)マスタにコミットします。

0

うまくいく方法はいくつかあります。

git cherry-pick master..remote-master 

意志remote-masterにあるすべてのコミットをチェリーピックではなくmaster中とEFE'F'と同じ変化を導入として、コミットが空になると、あなたはそれらをスキップすることができます。
も動作するはずもちろん、直接

git cherry-pick F..remote-master 

git rebase master remote-master 

を行うことができます。 remote-masterにあるが、masterにないすべてのコミットをmasterに適用しようとします。 E'F'を変更しないコミットは、その変更がすでにそのブランチにあるので、自動的にスキップする必要があります。
別の方法としては、もちろん

git rebase --onto master F remote-master 

git pull --rebase 

もちょうどgit rebase master remote-masterのように動作するはず行うことができます。

あなたは常にきれいにSVNリポジトリに話を書き換えリニア歴史を必要として、あなたは多分設定を変更する必要がありますので、pullが自動的にrebaseなくmergeを行うこと。同時に、複数のボックスで同時にコミットすると、簡単な履歴をdcommitに簡単に生成することができます。

関連する問題

 関連する問題