git:コードの最新バージョンを入手するにはどうすればよいですか?


200

Git 1.7.4.1を使用しています。リポジトリからコードの最新バージョンを取得したいのですが、エラーが発生します...

$ git pull
….
M   selenium/ant/build.properties
….
M   selenium/scripts/linux/get_latest_updates.sh
M   selenium/scripts/windows/start-selenium.bat
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'.

ツールが不平を言っているファイルのローカルコピーを削除しましたが、それでもエラーが発生します。リモートリポジトリから最新バージョンをチェックアウトするにはどうすればよいですか?-デイブ


1
以下の@Kzqaiの回答が役に立ちましたgit fetch。最初にやってみてください。競合は発生していませんでしたが、最新バージョンのコードを取得したのはこのためです。
Chris K

回答:


258

ローカルの変更(追跡されていない、または生成されたファイル、またはここにたまたまあるサブリポジトリを含む)を気にせず、リポジトリからのコピーが必要な場合:

git reset --hard HEAD
git clean -xffd
git pull

繰り返しになりますが、これによりローカルで行った変更がすべて削除されるため、慎重に使用してください。rm -Rfこれを行うときに考えてください。


1
私はこれらのコマンドを試しましたが、「CONFLICT(コンテンツ):selenium / ant / build.xmlでの競合のマージ」というエラーが引き続き発生しました。リポジトリの内容でファイルの最新バージョンを上書きしたいだけです。私に何ができる??
デイブ

31
git clean -f答えの一部ではありません。リポジトリに保存されていないファイル(たとえば、私の場合はログファイル)を削除します。git pull再び機能させるためにこれを行う必要はありませんgit reset --hard HEAD。それで十分です。
ダレン・クック

12
えーっと、初心者にgitを実行するための数少ない削除コマンドの1つはお勧めしません。
Kzqai 2013年

6
@DarrenCook リポジトリを実際にクリーンアップしgit clean -fたい場合は重要だと思います。これは、TFSで「フォルダーからすべて削除->最新バージョンを取得/特定を取得」を実行するのと同じであり、私の場合、これは私が欲しかったものです。
RPDeshaies 2015

3
@Darren git clean -f``も重要だと思います。最新バージョンを取得したいのですが、古くなったキャッシュエントリや、リポジトリにない他の生成されたリソースを保持したくありません。答えはローカルの変更を削除し、リポジトリから最後のバージョンを模倣するという事実について明確であるため、私には完璧に見えます。更新間でログファイルを保持する必要がある場合は、ログファイルを別の場所に移動します。
Balmipour

231

ケース1:ローカルの変更を気にしない

  • 解決策1:最新のコードを取得してコードをリセットする

    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
    
  • 解決策2:フォルダーを削除して再度クローンを作成する:D

    rm -rf [project_folder]
    git clone [remote_repo]
    

ケース2:地域の変化に注意する

  • 解決策1:新しいオンラインバージョンと競合しない

    git fetch origin
    git status
    

    次のようなものを報告します:

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
    

    次に、最新バージョンを取得します

    git pull
    
  • 解決策2:新しいオンラインバージョンと競合する

    git fetch origin
    git status
    

    次のようなものを報告します:

    error: Your local changes to the following files would be overwritten by merge:
        file_name
    Please, commit your changes or stash them before you can merge.
    Aborting
    

    ローカルの変更をコミットします

    git add .
    git commit -m ‘Commit msg’
    

    変更を取得しようとします(失敗します)

    git pull
    

    次のようなものを報告します:

    Pull is not possible because you have unmerged files.
    Please, fix them up in the work tree, and then use 'git add/rm <file>'
    as appropriate to mark resolution, or use 'git commit -a'.
    

    競合ファイルを開き、競合を修正してください。次に:

    git add .
    git commit -m ‘Fix conflicts’
    git pull
    

    次のようなものを報告します:

    Already up-to-date.
    

詳細: 「git reset --hard HEAD」を使用して以前のコミットに戻すにはどうすればよいですか?


tvl.How @私はbranch..pleaseヘルプ私に(競合を持っている)私のコードをコミットせずに最新の更新プログラムを入手することができます
user3354457

@ user3354457 xm、興味深い質問。私は今までこれを試したことはありませんが、それを試して報告することもできます;)そのため:-変更を加えてパッチを作成します:git diff> uncommited-
changes.patch-

3
この回答は、回答として受け入れられた回答よりもはるかに多くの賛成票を投じる価値があります。
ジェームズ

@James :)私の答えがあなたを助けてくれてうれしいです。ヒント、件名について何も知らないようなドキュメントを書いてみてください。間違いなく、冗長性が役立つでしょう。
tvl 2016

4
git fetchの最良の完全な答え。この投稿はロックされている必要があります
Callat

17

あなたが変更したファイルを削除したことが原因であると思います(これらの変更は気にしていなかったため)、そしてgitは削除を変更と見なしています。

ここでは、変更を作業コピーから「スタッシュ」に移動する方法を示します(実際に再び必要になることが判明した場合に取得可能)。これにより、最新の変更を上流からプルダウンできます。

git stash  
git pull

ファイルを取得したい場合(上流での変更とすべてで競合する可能性がある場合)は、git stash applyこれらの変更をコードの上に貼り付けるためにa を実行します。このように、「元に戻す」方法があります。


1
git stash popgit stashの履歴が必要でない限り、おそらく使用をお勧めします
Rapnar '18

7

最初にファイルをマージする必要があります。a git statusを実行して、マージする必要があるファイルを確認します(最初に競合を解決する必要があることを意味します)。これが完了git add file_mergedしたら、pullやり直してください。


2
ありがとう。私はこの問題に直面していました。作業ファイルに変更を加えましたが、コミットしたくありません。ただし、この場合はgit pullを実行できません。だから私はそうします-git stash、git pull --rebase、git stash pop。次に、手動でマージしてgit add file_merged
RuntimeException

6

このコードを試してください

cd /go/to/path
git pull origin master

5
Stackoverflowへようこそ!それが問題を解決する方法をよりよく説明するために、ソリューションにいくつかの説明を追加することを検討してください。これにより、回答がさらに便利になります
dkackman

2

作業フォルダー内のすべてのもの(たとえば、マージの失敗または中止の結果)を破棄し、クリーンな以前のコミットに戻す場合は、を実行しgit reset --hardます。


1

ローカルの変更を破棄して、リモートの何をプルダウンしたいのですか?

他のすべてが失敗した場合、そして(かなり当然のことながら)「リセット」が怖い場合、最も簡単なのは、originを新しいディレクトリに複製し、古いディレクトリをゴミ箱にすることです。


1

このコマンドを実行すると、通常はプロジェクトのバージョンである最新のタグが取得されます。

git describe --abbrev=0 --tags

0

core.autocrlf-problemsが発生しているようです。core.autocrlf = trueは、CRLF改行がリポジトリにチェックインされた場合に、Windowsで説明したような問題を引き起こす可能性があります。リポジトリのcore.autocrlfを無効にして、ハードリセットを実行してください。


0

Git GUIを使用している場合は、最初にフェッチしてからマージします。

リモートメニューからのフェッチ>>フェッチ>> Origin。Mergeメニュー>> Merge Localからマージします。

次のダイアログが表示されます。

ここに画像の説明を入力してください

トラッキングブランチのラジオボタンを選択し(これもデフォルトで選択されています)、黄色のボックスを空のままにして、[マージ]をクリックすると、ファイルが更新されます。

私はこれらの手順を実行する前に、ローカルの変更を元に戻していました。とにかくそれらを破棄したかったので、後でマージによって削除する必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.