0

master を作業中の現在のブランチにプルし、競合を確認するにはどうすればよいですか?

また、マージまたはリベースする必要がありますが、どちらが正しいかわかりません。

4

3 に答える 3

2

まず、リモートからすべてのブランチをプルします

git pull origin

これを行うと、すべてのブランチがプルされます(マスターを含む)。

ここで、マスターを現在のブランチにマージしたいので、次のようにします。

git merge master

競合が自動的に解決された場合は、これで完了です。

変更が自動的にマージされなかったと表示された場合は、競合を解決する必要があります。

競合を解決するには、〜/.gitconfigを編集して追加します

[merge]
    tool = meld

次に、meld diffツールをインストールします(たとえば、Ubuntuでは実行しますsudo aptitude install meld

このようなウィンドウが表示されます

Meldスクリーンショット

左側にローカルバージョンがあります。右側には、リモートバージョンがあります。

真ん中には、マージ後の目的の状態があります。両側からすべてのビットを選択して選択し、それらを中央に配置したら、保存(CTRL + S)してmeldを終了します。Gitは、マージする必要のある次のファイルについて通知します。マージが完了するまで同じことを行います。

これの最後に実行git diffして、実行したマージが正しいことを確認できます。

また、コードを実行して、希望どおりに機能することを確認します。

次に、コミットgit commit -am "commit_message"して、変更をブランチにプッシュします。

于 2013-03-06T18:37:24.483 に答える
1

なぜ現在のブランチにプルする必要があるのですか? トラブルのように聞こえます。

最新のマスターを手に入れて、違いを比較してみませんか?そうすれば、何をしているのかわからないままマージすることはありません。

この場合:

# in your master branch do
git pull origin master

作業中の機能ブランチに切り替えます。

git checkout your_branch_name

新しいブランチに入ったので、違いを確認できます (緑は追加したもので、色もオンになっていると仮定します)。

git diff master

もちろん、チェックアウトを行わなくてもマスターとの差分を見ることができます。その場合、オリジン マスターをプルしてから diff を実行します。

# in master
git pull origin master

# now do a diff while still in master
git diff your_new_feature_branch
于 2013-03-06T18:40:40.257 に答える
0

マージとリベースには、それぞれ長所と短所があります。

リベースの利点: 「マスター」の現在のヘッドが現在のブランチの祖先になるという点で、コミット履歴を「よりクリーン」に保ちます。共通の祖先が歴史に深く埋もれているのを好まない人もいます。一部の場所では、コミットする前に機能ブランチを常に master にリベースすることがポリシーになっています。

リベースの欠点: ブランチの履歴を完全に書き換えます (すべての sha1 が異なります)。これは、あなたまたは他の誰かがフィーチャー ブランチからブランチを作成し、それを再びマージしようとした場合に問題を引き起こす可能性があります。

経験則として考えられるのは、広く公開されておらず、他のブランチの基礎になっていないブランチをリベースすることです。

于 2013-03-06T19:01:46.490 に答える