web-dev-qa-db-ja.com

ローカルの変更を無視しながらGit Pull?

ディレクトリを壊さずにgit pullを実行しなくても、ローカルファイルの変更をすべて無視するgit cloneを実行する方法はありますか?

392
markdorison

プルでローカルの変更を上書きしたい場合は、作業ツリーがクリーンであるかのようにマージを実行して、作業ツリーをクリーンにします。

git reset --hard
git pull

追跡されていないローカルファイルがある場合は、git cleanを使用して削除できます。 git clean -fを使用して未追跡ファイルを削除し、-dfを使用して未追跡ファイルとディレクトリを削除し、-xdfを使用して未追跡または無視されたファイルまたはディレクトリを削除します。

一方、ローカルの変更を何らかの方法で保持したい場合は、スタッシュを使用してそれらを隠してから引っ張り、その後再適用します。

git stash
git pull
git stash pop

文字通りignoreの変更は意味がないと思いますが、プルの半分はマージであり、コミットされたコンテンツのバージョンをフェッチしたバージョンとマージする必要があります。

699
Cascabel

私にとっては、以下がうまくいった:

(1)まずすべての変更を取得します。

$ git fetch --all

(2)それからマスターをリセットします。

$ git reset --hard Origin/master

(3)取得/更新

$ git pull
215

以下のコマンド は常に動作しません 。あなただけの場合:

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'Origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla

$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

等々...

本当に やり直すには、ブランチをダウンロードしてローカルのすべての変更を上書きします。


$ git checkout thebranch
$ git reset --hard Origin/thebranch

これはうまくいきます。

$ git checkout thebranch
Already on 'thebranch'
Your branch and 'Origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.

$ git reset --hard Origin/thebranch
HEAD is now at 7639058 Here commit message again...

$ git status
# On branch thebranch
nothing to commit (working directory clean)

$ git checkout thebranch
Already on 'thebranch'
21
Dr Beco

あなたはrm -rf local_repo && git clone remote_urlと全く同じ結果を与えるコマンドが欲しいのですよね?私もこの機能が欲しいです。どうしてgitがそのようなコマンド(git reclonegit syncなど)を提供していないし、svnもそのようなコマンド(svn recheckoutsvn syncなど)を提供していないのでしょうか。

次のコマンドを試してください。

git reset --hard Origin/master
git clean -fxd
git pull
13
Victor
git fetch --all && git reset --hard Origin/master
8
Luca C.

git stash を見て、あなたのローカルな変更をすべて "stashファイル"に入れて最後のコミットに戻してください。その時点で、あなたはあなたの隠された変更を適用するか、あるいはそれらを捨てることができます。

7
Seth Johnson

Linuxをお使いの場合

git fetch
for file in `git diff Origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull

Forループはローカルリポジトリで変更されたすべての追跡ファイルを削除するので、git pullは問題なく動作します。
これに関して最も良いことは、追跡されたファイルだけがリポジトリ内のファイルによって上書きされ、他のすべてのファイルはそのまま残されることです。

7

これは私のために働いた

git fetch --all
git reset --hard Origin/master
git pull Origin master

受け入れられた答えで私は矛盾の誤りを得る

1
Pablo Pazos

これは現在のブランチを取得し、マスターへ早送りをしようとします。

git fetch && git merge --ff-only Origin/master
0
Petah

.gitignore

「最初にブランチにコミットしていない限り、不要なファイルを.gitignoreに追加しても機能します。」

また、次を実行できます。

git update-index --assume-unchangedファイル名

https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html

0
Leo Bravo

私は通常:

git checkout .
git pull

プロジェクトのルートフォルダー。

0
Cassiano Franco