これは私がよく使うものです:
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
あなたのローカルマスタへの変更は、/枝を開発しないこととしたことは良い習慣ですが、代わりにチェックアウト変更のための別のブランチに、変更の種類によって先頭に付加ブランチ名を持つ、例えばという注意feat/
、chore/
、fix/
、などしたがって、あなただけに必要マスターから変更をプッシュするのではなく、変更をプルします。他のブランチが貢献している他のブランチについても同じことが言えます。したがって、上記の方法は、他の人がコミットしたブランチへの変更をたまたまコミットし、リセットする必要がある場合にのみ使用してください。それ以外の場合は、将来、他の人がプッシュするブランチにプッシュするのを避け、代わりにチェックアウトして、チェックアウトされたブランチを介してそのブランチにプッシュします。
ローカルブランチをアップストリームブランチの最新のコミットにリセットしたい場合、これまでのところ私にとってはうまくいきます:
リモートを確認し、アップストリームとオリジンが期待どおりであることを確認します。期待どおりでない場合はgit remote add upstream <insert URL>
、たとえば、元のGitHubリポジトリからフォークしたものを使用しますgit remote add origin <insert URL of the forked GitHub repo>
。
git remote --verbose
git checkout develop;
git commit -m "Saving work.";
git branch saved-work;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force
GitHubでは、ローカルのブランチと同じ名前のブランチをチェックアウトして作業をそこに保存することもできます。ただし、オリジンの開発にローカルの保存された作業のブランチと同じ変更がある場合は必要ありません。ここでは例として開発ブランチを使用していますが、既存のブランチ名でもかまいません。
git add .
git commit -m "Reset to upstream/develop"
git push --force origin develop
次に、競合がある場所でこれらの変更を別のブランチとマージする必要がある場合、開発で変更を保持するには、以下を使用します。
git merge -s recursive -X theirs develop
使用中
git merge -s recursive -X ours develop
branch_nameの競合する変更を保持します。それ以外の場合は、mergetoolを使用しgit mergetool
ます。
すべての変更をまとめて:
git commit -m "Saving work.";
git branch saved-work;
git checkout develop;
git fetch upstream develop;
git reset --hard upstream/develop;
git clean -d --force;
git add .;
git commit -m "Reset to upstream/develop";
git push --force origin develop;
git checkout branch_name;
git merge develop;
アップストリーム/開発の代わりに、コミットハッシュや他のブランチ名などを使用できることに注意してください。OhMy ZshなどのCLIツールを使用して、ブランチが緑色で、コミットするものがなく、作業ディレクトリがクリーンであることを確認します(によって確認または検証可能ですgit status
)。これは実際にはそう、その場合には、コミットによって自動的に例えばUMLダイアグラム、ライセンスヘッダなど、追加何があるかどうか開発上流へと比べコミットを追加することがありますが、あなたはその後に変更を引っ張る可能性origin develop
にupstream develop
必要であれば、。
git status
あなたの2番目のコマンドの出力によるとgit reset --hard HEAD
失敗しました。ただし、出力は貼り付けていません。→不完全な質問。