2012-09-20 14 views
5

いくつかの背景現れてコミット:私は1つのサイトに取り組んで単一開発者ですgitの単一開発 - リベースと二回

  1. を。
  2. 私はgitをバージョン管理に使用しています。現在、私は私のサーバー上の中央、裸のリポジトリを持っているオフィス、家庭、およびラップトップ

  • は私が仕事から複数のコンピュータを持っています。各コンピュータはこのリポジトリのクローンをクローズし、このリポジトリへの変更をプッシュします。私は現在ブランチマスターとブランチdevを持っています。すべての作業はdevブランチで行われます。マスターは常に最新の安定した生産コードです。変更は、devで行われている変更とともに、いつでもマスターに適用できます。私は、これは、単一の開発者のためにかなり標準的なワークフローであるべきと考えてい

    git checkout dev 
    //pull in changes from remote 
    git pull 
    //make and commit changes as need throughout the day 
    git add -u 
    git commit 
    //these steps only happens when I know master has changed 
    git checkout master 
    git pull 
    git checkout dev 
    git rebase master //to get changes to master into dev branch 
    //push changes to central remote at end of day 
    git push 
    

    私の日常のワークフローが構成されています。

    私の質問の目的のために今、すべての方法で。私は最近、どのように適切に対処するのか、それを未然に防ぐ方法がわからないという状況に遭遇しました。現在、私のdevブランチは長時間実行されているdevブランチであり、サイトの一部を大幅に書き直しています。このように、それは数ヶ月間開発されてきました。私はこの作業をしていましたが、私はMasterに対しても小さな変更やバグ修正を行ってきました。私がマスターへの変更の一つを終えると、私はdevにdevをrebaseして変更を取得し、中央リポジトリにプッシュします。これはうまくいきました。

    しかし、私は数日前にマスターに変更を加えました。私がリベースすると、すべての地獄が緩んでいるようだった。私はマスターに存在しなかったファイルのマージ競合を取得していました。同じファイル内で同じ競合が何度も繰り返されていました。すべての紛争を解決しようとする一日のうちに良いところを過ごした後、ついに私は諦めました。

    今朝、私はもう一度やり直しましたが、始めにプロジェクトのコミットの歴史を調べて、なんとか奇妙なものが見つかりました。私は約15回のコミットが繰り返されていることを発見しました。 2012年7月12日から08/24/2012までのすべてのコミットを示しました。その後、同じコミットを別のSHAハッシュで再表示しました。私はあなたが期待するようにコミットの日付がすべて時系列でリストされていたのを見るまでそれに気付かなかったが、突然再び過去に戻った。

    解決する別のリベースを行いましたが、重複したコミットをスキップしました。私がそれをしたとき、私は全く矛盾がないと思っていたのと全く同じように機能しました。

    私の質問は皆さんには、これらのコミットがどのように2回実行されたのか、この悪夢が今後どのように起こるのを防ぐことができるのでしょうか?問題のタイトルが示唆しているように、私は問題が私がrebasedとrebasedブランチを押すことの使用と関係があると仮定します。しかし、私は本当にそこにあると推測しています。私は何が間違っていたかを理解するための助けが必要です。

  • 答えて

    1

    3台の開発マシンを所有しているため、お使いのモデルは基本的に3人のデベロッパーと同じだと思います。だから、あなたのdevブランチはその意味で共有されています。私は、共有ブランチとしてのリベースは問題につながるので、リベース共有ブランチよりもマージするほうがよいとSOのことを読んでいます。読んだ後、私はプライベートブランチにのみリベースを使い始めました。良い結果が得られました。私は、テストリポジトリを作成し、2つのアプローチを試して比較する方法を試してみることをお勧めします。

    私が他のSOの質問を見つけることができたら、私はここにリンクを追加します。

    編集:

    ここで、それはもちろんRebasing remote branches in Git

    あり、この上のさまざまな意見があります。 :)

    +0

    このリンクをありがとう。私があなたとリンクを正しく理解していれば、私はすべてのマシンの同じ支店で働いているので、私はリベースの代わりにマスターからの変更をマージするべきですか?私はマスターからの変更を定期的にマージすることを心配する必要がありますか?または、devブランチをマスターにマージする準備が整うまで、それを保存する必要がありますか? – adear11

    +0

    あなたは大歓迎です。 –

    +0

    それは、私もそのリンクを理解する方法です。それは唯一のアプローチではありませんが、うまくいくように見えます。私がこのアプローチを使用しているところで、私はかなり定期的にマージします。私はそれが好きです。なぜなら、紛争解決は、大規模な紛争解決よりも小さな争いのほうが簡単であるからです。 –

    関連する問題