私はgitの初心者であり、スタッシングがどのように機能するかについては明確ではありません。
ブランチマスターで作業しており、git pull
を実行しようとして、ローカルの変更が上書きされ、スタッシュまたはコミットする必要があるというエラーを受け取ったとします。変更をステージングしてgit stash
を実行していない場合は、git pull
を実行し、正常に更新しますが、git stash apply
を実行するとどうなりますか?
一般に、誰かがファイルを変更してgit pull
を実行した場合、run git stash apply
を実行するとどうなりますか?ファイルを隠したときにステージングされたかどうかに関係なく、更新されたファイルは上書きされますか? git pull
で更新したすべてのファイルを、隠されたファイルで上書きしますか?
stash gitコマンドは、stashがどこから来たかを覚えています:
git stash list
出して
stash@{0}: WIP on master.color-rules.0: 35669fb [NEW] another step toward initial cube
作成されたSHA1を確認できる場所。したがって、git stash、git pull、git stash applyで競合が発生した場合、stashはドロップされません(ドロップした場合、または適用が成功した場合のみ)。したがって、git stashリストからSHA1をいつでも取得でき、
git checkout 35669fb
git stash apply
動作することが保証されています。 -bオプションを使用して、その復旧のブランチ名を指定することをお勧めします。
そうは言っても、私のお気に入りのワークフローは、このような問題を回避するために常に新しい「個人」名でチェックアウトすることです
通常、コミットされていない変更は常に悪いです。変更が適切である場合、コミットするか、破棄するよりも悪いです。コミットされていない変更を行っている状態でgit操作を行うと、トラブルが発生する傾向があり、コミットしていないことをgitが認識していないため、gitは役に立ちません。
それでは、質問に戻ります。 ;)
Gitは一般的にかなりスマートです。 stashを適用すると、変更が他の変更とマージされます。ほとんどの場合、これは機能します。
同じ行を別の方法で変更したために、変更が実際に競合する場合、gitが通知し、自分で競合を解決する必要があります。 -この場合でも、gitはgit mergetool
、適切なコマンドを起動して競合を表示し、競合を1つずつ解決します。