2

私は時々これに遭遇します:

  1. サーバー上で、git clone myrepo
  2. foo.sh問題を解決するためにマシン 1 を変更します。
  3. 動作するので、開発マシンで変更を複製します。
  4. 開発マシンでgit add foo.sh、、、git commitgit push
  5. サーバー上で、git pull

    remote: Counting objects: 1, done.
    remote: Compressing objects: 100% (1/1), done.
    remote: Total 5 (delta 4), reused 5 (delta 4)
    Unpacking objects: 100% (5/5), done.
    From ...
       c78..e4d  master     -> origin/master
    Updating c78..e4d
    error: Your local changes to the following files would be overwritten by merge:
        foo.sh
    
    Please, commit your changes or stash them before you can merge.
    Aborting
    

Git をもう少し賢くして、「ローカルの変更」がマージの変更と同じであることに気付く方法はありますか? もちろん、単純にgit reset --hard' にすることもできますが、リモートで行った変更が本当に同じであることを再確認したいと思います。

4

2 に答える 2

1

新しいツリーと直接比較できます。git diff origin/master作業ディレクトリをアップストリームの変更 (マージしようとしたツリー) と比較するため、変更が一致するかどうか、およびローカルの変更を破棄しても安全かどうかについての質問に答える必要があります。

git のドキュメントでは、コミットされていない変更でプルとマージを行うことに対して警告しています。あなたが求めている自動動作を得ることができるとは思いません。

于 2013-10-18T11:11:21.327 に答える
1

リモートで行った変更が本当に同じであることを再確認したいと思います。

できますが、git を介して自動的に行うことはできません。これと同様
のスクリプトを使用できますが、' ' を直接実行する代わりに、のファイルを現在の作業ツリーのファイルと比較することができます(同一の場合は rm も)。rmorigin/yourBranch

# Fetch the newest code 
git fetch 

# Delete all files which are being added, so there 
# are no conflicts with untracked files 
for file in `git diff HEAD..origin/master --name-status | awk '/^A/ {print $2}'`
do
    # diff between "$file" and $(git show origin/master:$file)
done
于 2013-10-18T06:12:48.453 に答える