2016-10-28 7 views
-1

私はgitを1年間使っていますが、git pullが何をしているのかは私自身が最初に尋ねています。git pullとは何ですか?

これは私が問題に直面した方法です。私は間違いなくdevブランチに何かをコミットしますが、それは問題ありません。私はそこに私の変更をプッシュ新しい支店を作成します。だから私はバックのdevの支店に行き、私の使用してコミットのすべての隠し:

$ git reset --hard origin/master

をそれから私は私がgitのプルを行う最新のdevの枝をしたいです。

ええ、それはマージ競合と言いますか?私が望むのは、リモートデベロッパーの最新バージョンだけです。つまり、私はすでにすべてを隠していると思いますが、それはうまくいくでしょうか?どうしましたか?

+0

'git pull 'はまず' git fetch'を実行してから 'git merge'を実行します。 'fetch'ステップが' rebase'が適している変更をもたらすことが分かっているならば、 'git pull'に' git rebase'を2番目のステップとして使うように指示できます。 (しかし、どちらがもっと適しているかは、どのようにして知ることができますか?確かめるには、 'git fetch'を自分で実行し、結果を調べることです。' git merge'を実行する。だから、 'git pull'はほとんど価値がありません。) – torek

+0

rebaseはstashのようですか?私はちょうど最新のdevブランチのコピーが必要です。 –

+0

いいえ、コミットグラフの他の箇所の後に新しいコピーが現れるように、コピーをリベースしてください(おそらく理想的にはあなたの*コミットが理想的です)。 (Gitはグラフ理論に大きく依存しています:コミットはDirected Acyclic Graphを作成し、このDAGは "歴史"を構成します)Rebaseはいくつかの古い履歴をいくつかの新しい場所にコピーし、コピーされた履歴は同じ*効果*別の*出発点*)最初にGitを使用するという点は、*あなたの*仕事を*他の人の*仕事と組み合わせる能力です。 – torek

答えて

0

git fetchを使用すると、リモートリポジトリからブランチが更新されます。次にgit mergeを使うべきです。 Git pullも同じことをしますが、枝のリモート変更を強制的にマージして衝突を起こす可能性があります。

0

origin/masterブランチには、origin/devというコミットがいくつかあるため、マージ競合が発生していると思います。しかし、その理由が解決策に変わることはないでしょう。代わりにgit reset --hard origin/masterの、これを修正するには、実行する必要があります:あなたが最後に引か以来

$ git fetch origin dev 
$ git checkout dev 
$ git reset --hard origin/dev 

最初のコマンドはorigin/devに変更を取得します。

2番目のコマンドは、あなたがdevブランチにいることを確認するだけです。

3番目のコマンドは、ローカルのdevブランチをリモートのorigin/devブランチのように再設定します。