2012-01-26 11 views
1

私はしばらくの間SVNを使用しています。しかし、ちょうど履歴付きのバックアップが必要なので、ちょうどチェックアウト、更新、コミットを使用します。Gitではマージが必須ですか?

私はGitを新しいプロジェクトにしようとしています。ここに私がしたことがあります:

  • Bitbucketでリポジトリを作成しました。
  • 私のマシンに複製できます。
  • いくつかのファイルを作成しました。
  • Gitコミット-a。
  • Git push。

すべて罰金。私はBitbucketをチェックし、ファイルがそこにあった。あれは昨日だった。今日私はしました:

  • いくつかのファイルを追加しました。
  • Gitコミット-a。
  • Git push。

エラーメッセージが表示されます。私はそれを保存しなかったが、それは早送りについて何か言った。何らかの理由でリポジトリに自分のコミットをプッシュできませんでした。私はいくつかのフェッチ、コミットとプッシュを行い、同じエラーを押しているとき。それから私は引っ張りを行いました。私が知っている限り、フェッチとその後のマージ、そしてプッシュとそれはうまくいったのです。私のリポジトリのログは次のようになります:

commit ef6b0e51c8278ef15d1d84770a56929f7c30cc63 
Merge: 15d482c ab3938a 
Author: xxx 
Date: Wed Jan 25 04:25:39 2012 -0200 

    Merge branch 'master' of bitbucket.org:xxx/xxx 

commit 15d482c0bd2e9b894afd779520dbfdbad7f43616 
Author: xxx 
Date: Tue Jan 24 03:50:43 2012 -0200 

    xxx 

commit ab3938aaacb089f1c4f3bdbb8d843a105991f776 
Author: xxx 
Date: Tue Jan 24 03:50:43 2012 -0200 

    xxx 

これは変です。最初のコミットは正しいです。昨日やった。しかし、2番目の日は今日の日付でなければなりません。しかし、それは昨日とまったく同じ日付を秒まで持ちます。そして、3回目のコミットがあります。これは、今日の日付でのマージだけです。

これはそうなるのでしょうか?それとも私は何か悪いことをしましたか?私はコミットとプッシュをマージする必要がありますか?

答えて

1

私は問題が何かを理解しました。私は2番目のコミットで "最後のコミットの修正"をチェックしました。だから、基本的に私はした:

  • Bitbucketでリポジトリを作成します。
  • クローン。
  • ファイル1を追加します。
  • コミット。
  • プッシュ。
  • ファイル2を追加します。
  • プッシュを--amendコミットします。私が得た

エラー:

git.exe push --progress "origin" master:master 

To [email protected]:xxx/test_repo.git 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '[email protected]:xxx/test_repo.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

私が取得し、マージしてみました。まだプッシュできませんでした。私はプルをしなければならなかった。私は得た:

git.exe pull -v --progress  "origin" 

From bitbucket.org:xxx/test_repo 
= [up to date]  master  -> origin/master 
Merge made by the 'recursive' strategy. 
Success 

私はプッシュすることができます。すでにプッシュされていたそのコミットを改正

が問題でした。そのため、両方のコミットが同じ日付になります。

ありがとうございました。

+0

ようこそ。あなた自身の質問に答えた場合は、それを答えとして選択して、検索でこれを有効にする将来のユーザーを助けてください。 –

1

早送りの更新ではないのでプッシュできない場合は、誰かがbitbucketにコミットをプッシュしたことを意味します。早送りの更新とは、現在のコミットの履歴、すなわち前回のコミットからの更新です。あなたはマージをしていない、あなたは単に早送りの時間です。

プルはgit fetchを実行し、次にgit mergeを実行します。実際のマージが行われる場合とされない場合があります。できるだけ早くgitがデフォルトで早送りを行います。

上記のログから、実際のマージがあったので、正方形に戻ります。何とかあなたのbitbucketリポジトリに余分なコミットがいくつかありました。あなたはおそらくオンラインで編集をしましたか?

マージの必要性については、にはのマージが必要です。あなたはフォークを解決する必要があります。これは2つの方法のいずれかで行うことができます。マージを行うことも、リベースと呼ばれることを実行することもできます。基本的には、rebaseを実行するときにgitが行うのは、コミットの差分を代替履歴の最後に再適用することです。これは、あなたが新しい仕事を他の新しい仕事の上に直接行ったという錯覚を作り出します。 Gitは作者とコミットの日付を保持していますので、多くのリベースに取り掛ければ履歴は少し非線形になることがありますが、一部の人は単一行の履歴を好む人もいます。あなたは簡単にプッシュgit pull --rebase

+0

他のユーザーはいません。私はこのリポジトリを使用します。他のユーザーがコミットを追加した場合は、ログに表示されるはずです。 – Italo

+0

@ user1170442:gitkのようなグラフィカルログを試してみてください。これは何が起こったかを明確にするのに役立ちます。親が1つしかないマージコミットがある場合は、 'merge.ff'の値を' git config merge.ff'でチェックしてください。'false'の場合、gitは強制的にマージコミットを強制します:http://schacon.github.com/git/git-config.html –

+0

マージコミットが2つの親を持つ場合、* something *は何とかあなたのリモートレポにコミットしてください。繰り返しますが、gitkは何をいつどこで見つけるのを助けます。 –

1

を使用してリベースを行うことができますプッシュブランチをリモートブランチの現在の頭があなたの地元の一部でなければならないことを意味し、fast-forwardマージを使用してブランチにプッシュにマージすることができるならば、唯一可能です枝の歴史。リモートブランチの最新バージョンがローカルブランチにマージされていない場合、プッシュは失敗します(これはsvnと同じですが、ローカルバージョンが最新でない場合はコミットできません)。

したがって、昨日のプッシュと今日プッシュしようとしている間に(リモートリポジトリ上の)そのブランチにプットされたコミットがあったようですが、与えられた情報ではどこから来たのかはわかりませんでした。

だから、あなただけでは(そして唯一の場所から)ブランチ上で作業している場合、あなたは一般的に、単純にコミットしてプッシュすると逃げることができ、そうでなければ、続くgit fetchを使用する必要がありますgit merge(または単にgit pull)最大限に活用するためにあなたがそれを押すことができる前に、あなた自身のリモートブランチの最近のバージョン。

+0

他のユーザーはいません。私はこのリポジトリを使用します。 – Italo

+0

@ user1170442:どういうわけか、地元の歴史と世界の歴史の間に違いがあったとしか言えません。なぜ彼らが異なるのかを言うのに十分な情報がありません – Grizzly

1

他のユーザーがあなたのBitbucketリポジトリにコミット追加ように聞こえます。 gitが早送りできないというメッセージでプッシュが失敗した場合に起こりうることは、まさにそのことです。

gitログには、という何かがef6b0e5でマージされていると報告されています。

そして、あなたは解決策を見つけた:あなたはgitのは、あなたがあなたの変更をプッシュできるようになる前のBitbucketのリポジトリからプル(フェッチし、あなたのブランチに上流の変更をマージ)しなければなりませんでした。

+0

他のユーザーはいません。私はこのリポジトリを使用します。他のユーザーがコミットを追加した場合は、ログに表示されるはずです。 – Italo

+0

また、Bitbucked氏はコミットについて述べています。ef6b0e5: 影響を受けていないファイルはありません。このコミットは、15d482c0bd2eとab3938aaacb0のマージです。 – Italo

+0

@Matthew氏によると、 "どういうわけか、あなたのbitbucketリポジトリに何らかの余分なコミットが加わりました"。別のユーザーではない可能性があります。それがどうやって起こったのか分かると、プッシュする前に引っ張っていかなければならなかった理由が明らかになったでしょう。 btwを使うと、git logに--graphオプションを使って、ブランチの進化の仕方を知ることができます。 – hughw

関連する問題