2017-03-10 12 views
0

ローカルマシンとリモートサーバーに3つのgitリポジトリが設定されています。私は私のローカルマシン上のソースコードを変更し、サーバー上の裸のレポにプッシュし、サーバにログインし、自分のウェブサイトに裸のレポから引っ張っ:Gitはリセットからの変更を取り込めません

Local Machine     SERVER  
+++++++++++++++++  +++++++++++++++++++++++++++++++++ 
+ Source Code +  +      Website + 
+ repo 1 ---------------->bare repo----------->repo 3 + 
+    + [push] +    [pull]   + 
+++++++++++++++++  +++++++++++++++++++++++++++++++++ 

私は私にいくつかのコミットをリセットローカルマシンは:

    HEAD 
    1  2  3  4 
    o-----o-----o-----o 

git reset --hard 1 


HEAD 
    1  2  3  4 
    o-----o-----o-----o 

は、その後、私は問題がある裸のレポ

git push -f 

にリセットを押し、私は私のウェブサイトへの裸のレポからそれらを引くことができていないようです:

git pull origin master 

From bare-repo 
* branch   master  -> FETCH_HEAD 
Already up-to-date. 

編集:git log --graph --oneline --decorate

ローカルマシンの出力:

* 0f8c9c7 (HEAD -> master, origin/master, origin/HEAD) commit 1 
* 3e65e8f commit 0 
* 821e81f commit -1 
* 78c9427 commit -2 
* 57ab3d3 commit -3 

サーバー:

* 5075401 (HEAD, master) commit 4 
* 39402d0 commit 3 
* 4ebbf54 commit 2 
* 0f8c9c7 commit 1 
* 3e65e8f commit 0 
* 821e81f (origin/master, origin/HEAD) commit -1 
* 78c9427 commit -2 
+0

'git log -graph -oneline -decorate'はどのように見えますか?共有したくない詳細を削除することをお勧めします。 – Makoto

+0

みんな、 'git reset'はHEADにしか影響を及ぼさないと思っていましたが、HEADはSHAハッシュを持たないシンボリックリファレンスに過ぎないので、プッシュやプルできません。間違っていますか? @Makoto –

+0

'git reset'はHEADを作業ツリーの特定のポイントに移動します。それ以外の場合は、ツリーの先端を表します。プッシュ&プルには実際のコンテキストがありません。どちらの場合でも...私は本当に*私があなたに与えたコマンドの出力を見たいと思っています... – Makoto

答えて

0

あなたはのリポジトリを持っています。それぞれにはmasterブランチがあります。

git resetは、ご使用のマシンのリポジトリ#1にあります。その場合、masterを指定したコミットに設定します。

次に、マシンのgit push -f origin master:master(または同等のもの)をサーバーのリポジトリ#2に割り当てました。これは、リポジトリ#2のmasterを指定されたコミットに設定します。実際にはが削除されました。あなたのリポジトリ#1にあるgit resetで削除したものと同じものが#2でコミットされます。

その後、git pullをリポジトリ#3(「ウェブサイト」)から取得しました。これは、masterがリポジトリ#2に所在する場所を確認するためにgit fetchを実行しました。リポジトリ#3は、(Gitバージョン> = 1.8.4で)それ自身のorigin/masterをGitリポジトリ#2から入手したものに応じて設定し、次にgit mergeからに変更するとを追加します。新しいは、その(ウェブサイトの)master

しかし、リポジトリ#3には、そのマスターのコミットがすでにあります(以降、)。だから、何もしません、そして、 "私は最新です!実際には、私はさらにだよ、あなたよりも最新のが最新です!

あなたがコミットを削除しようとしているので、あなたはそのマスターからそのコミットを削除するには、リポジトリの#3での作業Gitの#3を取得する必要があります。 Gitは、コミットを追加し、削除しないで構築されています。それらを削除するには、git resetを使用するか、Git#3のmasterをGit#2のmasterに強制的に更新するか、その行に沿って何かを更新する必要があります。

関連する問題