ブランチをマージするためにmaster
にプルしています。
私が実行しているコマンドは(master
をチェックアウトしている間):git pull Origin feature/some_branch
残念ながら、私の同僚はそこでいくつかの(私が良性だと思う)ファイル削除を実行したようで、今ではgitがerror: unable to unlink old 'somefile': No such file or directory
を吐き出します。
私はオンラインで調べようとしましたが、このエラーに関する参照のほとんどは権限に関するものであり、ここではそうではありません。
問題のファイルは、マージ前にマスターにnot存在しますが、新しいブランチには存在します。
問題は、master
が長い間更新されなかったため、影響を受ける変更やファイルが多すぎて、コードを理解し始めることができないことです。
新しいブランチからのすべての変更を含めるには、master
が必要です。 master
に直接コミットすることは決してなく、常にマージを通じて行われます。
私がこれまでに試したこと:
--force
パラメータを使用して、同じ問題git reset Origin/master --hard
とpull
を再度実行すると、同じ問題が発生しますこのような問題を気にせずに、履歴を保持しながら、master
を別のより新しいブランチで更新するにはどうすればよいですか?
新しいブランチからのすべての変更を含めるためにマスターが必要です。
次に、そのブランチfeature/some_branch
の内容を反映するために、強制的にマージできます。
ただし、merge --ours master
を使用する代わりに、 同様のアイデア を使用できます。これにより、最初の親の履歴が保持されます。
git checkout master
# make merge commit but without conflicts!!
# the contents of 'ours' will be discarded later
git merge -s ours feature/some_branch
# make temporary branch to merged commit
git branch tmp
# get contents of working tree and index to the one of feature/some_branch
git reset --hard feature/some_branch
# reset to our merged commit but
# keep contents of working tree and index
git reset --soft tmp
# change the contents of the merged commit
# with the contents of feature/some_branch
git commit --amend
# get rid off our temporary branch
git branch -D tmp
# verify that the merge commit contains only contents of feature/some_branch
git diff HEAD feature/some_branch
master
ブランチをOrigin/master
のバージョンに置き換えるには、ブランチを削除して再作成してみてください。これを行うときにmaster
をチェックアウトする必要がないため、作業ディレクトリの変更に関連するエラーを回避できる場合があります。
まず、チェックアウトできる別のブランチをチェックアウトします。
git checkout feature/some-branch
次に、ローカルのmaster
ブランチを削除し、追跡情報を含めて再度作成します。
git branch --delete master
git branch master Origin/master
git branch --set-upstream-to=Origin/master master
最後に、新しいmaster
に切り替えてみてください。
git branch checkout master