1. ホーム
  2. git

Git がファイルのリセット/廃棄を拒否する

2023-07-21 14:52:14

質問

私は更新することができない特定の js ファイルを持つプロジェクトを持っています。私はローカルで OSX を実行し、私のリモート/ステージング サーバーは Linux (CentOS) です。

私のプロジェクトをローカルにクローンした直後に、私は git ステータスでこれらのすべてのファイルがあることに気づきました。 modified . 私はそれらを変更したことがないので、試しに discard changes または reset を追加しても、また出てきてしまいます。修正にあるのは、すべての行を削除して、再度追加することです。

なぜこのようなことが起こるのか、また、私の git ステータスが必要なほどきれいになるように修正する方法がわかりません。

以下はgit statusからの数行です。

#   modified:   app/webroot/js/ckeditor/plugins/devtools/lang/el.js
#   modified:   app/webroot/js/ckeditor/plugins/devtools/lang/fa.js
#   modified:   app/webroot/js/ckeditor/plugins/devtools/lang/gu.js

UPDATE 1:

上記のファイルをコミットすることができましたが、新しい編集を引き出せないため、ステージングサーバがロックされています。

error: Your local changes to the following files would be overwritten by merge:
    app/webroot/js/ckeditor/_source/lang/ar.js
    app/webroot/js/ckeditor/_source/lang/bg.js
    app/webroot/js/ckeditor/_source/lang/bn.js
    app/webroot/js/ckeditor/_source/lang/cs.js
    ...
Aborting

コミット/プッシュができないのは

Updates were rejected because a pushed branch tip is behind its remote counterpart

試してみました。

git reset --hard

git stash
git stash drop

しかし、動作しない、何も起こらない。

UPDATE 2です。

git diff は私に与えてくれます。

The file will have its original line endings in your working directory.
warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/fa.js.
The file will have its original line endings in your working directory.
warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/gu.js.
The file will have its original line endings in your working directory.
...

どのように解決するのですか?

行末を正規化する

修正にあるのは、すべての行を削除して、再度追加することです。

これはコミットされたファイルとディスク上のファイルとの間で改行が変更されているためです。

Githubでは ハンディページ に、この種の問題に対処する方法が詳しく書かれています。簡単に言うと(Linux/OSXの場合)、ステップ1はgitの設定を変更して、改行コードを整理してくれるようにすることです。

git config --global core.autocrlf input

その後、改行コードの正規化をコミットします。

git rm --cached -r .
# Remove everything from the index.

git reset --hard
# Write both the index and working directory from git's database.

git add .
# Prepare to make a commit by staging all the files that will get normalized.
# This is your chance to inspect which files were never normalized. You should
# get lots of messages like: "warning: CRLF will be replaced by LF in file."

git commit -m "Normalize line endings"
# Commit

とすれば、改行が正しく処理されるはずです。詳細は github のヘルプページか、git ドキュメントの該当箇所を参照してください。 書式設定と空白 .

linux-machineのコンフリクトを解決する

新しい編集を取り込まないため、ステージングサーバーがロックされています。

エラーメッセージには "次のファイルに対するローカルの変更は merge:" によって上書きされますとあります。ステージングサーバーの通常の使用(意図的な変更がない)と仮定すると、ローカルの変更は破棄することができます。たとえば、次のようにします。

$ git fetch origin
# Retrieve updates

$ git reset --hard origin/master
# Forcibly change the current branch to match origin/master

これは、作業コピーを更新せずにリポジトリの履歴を取得し、リポジトリの master ブランチと正確に一致するように更新します。最後のコマンドは、コミットされていない変更をすべて破棄することに注意してください。