3

私はgit-svnを使用しており、一連のコミットのローカルトピックブランチに取り組んでおり、変更をマスターにマージする際に問題が発生しました。

これらは私が今いる場所に私を導いたステップです:

git commit  (on topic branch)
git checkout master
git svn fetch (numerous files pulled down from origin)
git merge <topic branch>

この時点で、修正したマージの競合が発生しgit add <file>、修正したファイルを追加するためにを実行しました。

これで、git statusすべてのファイル(サーバーからフェッチされたすべてのファイルを含む)がコミットされる変更であると報告されました。git svn rebase私は自分の問題だと思っていることをするのを忘れました。

私は一般的にかなり新しいgitなので、私が見ているものが期待される動作であるかどうかさえわかりませんが、疑わしいようです。忘れてしまったgit svn reabseので困りましたか?この潜在的な混乱から抜け出すために私は何をしますか?

4

1 に答える 1

2

トランクで作業していると仮定して、マージコミットを破棄します

git reset --hard remotes/trunk

Subversionの変更に追いつく

git svn fetch
git svn rebase

今、2つのオプションがあります。トピックブランチに基づいて作業をリベースし、マージすることができます。

git checkout <topic branch>
git rebase remotes/trunk
git checkout master
git reset --hard remotes/trunk
git merge <topic branch>
git svn dcommit

代わりにsquash-mergeを使用することをお勧めします。これは、ブランチ上のすべての変更を1つのコミットにまとめることを意味します。上記のように破棄、フェッチ、リベースしてから

git merge --squash <topic branch>

クリーンマージは、レビューできるインデックスに移動します

git diff --cached

競合は作業ツリーに残り、次のように表示できます。

git diff

競合を解決し、でステージングしてgit addから、git commit新しいコミットをまとめます。

于 2013-01-14T03:21:15.960 に答える