ディレクトリを壊さずにgit pull
を実行しなくても、ローカルファイルの変更をすべて無視するgit clone
を実行する方法はありますか?
プルでローカルの変更を上書きしたい場合は、作業ツリーがクリーンであるかのようにマージを実行して、作業ツリーをクリーンにします。
git reset --hard
git pull
追跡されていないローカルファイルがある場合は、git clean
を使用して削除できます。 git clean -f
を使用して未追跡ファイルを削除し、-df
を使用して未追跡ファイルとディレクトリを削除し、-xdf
を使用して未追跡または無視されたファイルまたはディレクトリを削除します。
一方、ローカルの変更を何らかの方法で保持したい場合は、スタッシュを使用してそれらを隠してから引っ張り、その後再適用します。
git stash
git pull
git stash pop
文字通りignoreの変更は意味がないと思いますが、プルの半分はマージであり、コミットされたコンテンツのバージョンをフェッチしたバージョンとマージする必要があります。
私にとっては、以下がうまくいった:
(1)まずすべての変更を取得します。
$ git fetch --all
(2)それからマスターをリセットします。
$ git reset --hard Origin/master
(3)取得/更新
$ git pull
以下のコマンド は常に動作しません 。あなただけの場合:
$ 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'
あなたはrm -rf local_repo && git clone remote_url
と全く同じ結果を与えるコマンドが欲しいのですよね?私もこの機能が欲しいです。どうしてgitがそのようなコマンド(git reclone
やgit sync
など)を提供していないし、svnもそのようなコマンド(svn recheckout
やsvn sync
など)を提供していないのでしょうか。
次のコマンドを試してください。
git reset --hard Origin/master
git clean -fxd
git pull
git fetch --all && git reset --hard Origin/master
git stash を見て、あなたのローカルな変更をすべて "stashファイル"に入れて最後のコミットに戻してください。その時点で、あなたはあなたの隠された変更を適用するか、あるいはそれらを捨てることができます。
Linuxをお使いの場合
git fetch
for file in `git diff Origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
Forループはローカルリポジトリで変更されたすべての追跡ファイルを削除するので、git pull
は問題なく動作します。
これに関して最も良いことは、追跡されたファイルだけがリポジトリ内のファイルによって上書きされ、他のすべてのファイルはそのまま残されることです。
これは私のために働いた
git fetch --all
git reset --hard Origin/master
git pull Origin master
受け入れられた答えで私は矛盾の誤りを得る
これは現在のブランチを取得し、マスターへ早送りをしようとします。
git fetch && git merge --ff-only Origin/master
.gitignore
「最初にブランチにコミットしていない限り、不要なファイルを.gitignoreに追加しても機能します。」
また、次を実行できます。
git update-index --assume-unchangedファイル名
https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html
私は通常:
git checkout .
git pull
プロジェクトのルートフォルダー。