私はプロジェクトで数人の友人と共同作業を始めました。彼らはheroku gitリポジトリを使用しています。
私は数日前にリポジトリをクローンしました、そして、彼らはその後いくつかの変更を加えましたので、私は最新のアップデートを手に入れようとしています
私はここで述べたようにgit pull --rebase
コマンドを実行しました(これはそれを行う正しい方法ですか?): https://devcenter.heroku.com/articles/sharing#merging-code-changes
次のようなエラーが表示されます。
$ git pull --rebase
Cannot pull with rebase: You have unstaged changes.
Please commit or stash them.
私はそのコードをめちゃくちゃにしたので、変更をコミットするか破棄するかを望みます(stashとは何を意味するのでしょうか)。これは何が起こっているのでしょうか?このような場合は、私が行った可能性のある変更を破棄してgitリポジトリから更新されたコードを入手したいと思います。
私ができることについて何か考えはありますか?
git status
を実行してください、これはどんなファイルが変更されたかをあなたに示します。変更を保存したくないと述べたので、変更を取り除くためにgit checkout -- <file name>
またはgit reset --hard
を実行できます。
ほとんどの場合、gitは変更について何をすべきかを教えてくれます。たとえば、あなたのエラーメッセージはあなたの変更をgit stash
に言った。あなたがそれらを維持したいのであれば、これになります。引っ張った後、あなたはgit stash pop
をするでしょうそしてあなたの変更は再び適用されるでしょう。
git status
には、ファイルがコミット用にステージングされているかどうかに応じて変更を取り除く方法もあります。
リベースで引っ張ることは一般的には良い習慣です。
ただし、インデックスがクリーンでない、つまりコミットされていない変更を加えた場合は、それができません。
変更を保持したい場合は、これを回避するためにこれを実行できます。
git stash
git stash apply stash@{0}
またはより単純なgit stash pop
で再適用します。リベースの実行中に作業中の変更を維持したい場合は、--autostash
を使用できます。 のドキュメントから :
リベースを開始する前に、必要に応じてローカルの変更を隠して( git-stash [1] を参照)、完了したら隠しファイルを適用してください。
例えば:
git pull --rebase --autostash
まずgit status
で始めましょう
保留中の変更があるかどうかを確認してください。それらを破棄するには、実行してください。
git reset --hard
これは私のために働く:
git fetch
git rebase --autostash FETCH_HEAD
いつでもできる
git fetch && git merge --ff-only Origin/master
(a)アップストリームの変更と衝突するコミットされていない変更がある場合は変更はありません。(b)stash/pull/applyと同じ効果:HEADから最新の変更を反映するようにリベースします。 _および未確定の変更はそのまま残ります。
ステージングされていない変更がgitがファイル上のeol規約を修正しようとしているためであるとき(それは私の場合のように)、隠したりチェックアウトしたりリセットしたりしてもそれが消えることはありません。
ただし、意図したものが実際に実際にリベースしてステージングされていない変更を無視する場合は、ブランチをローカルで削除してからもう一度チェックアウトします。
git checkout -f anyotherbranchthanthisone
git branch -D thebranchineedtorebase
git checkout thebranchineedtorebase
ほら!まだ失敗していません。