リモートリポジトリにメインの開発ブランチがあるこのプロジェクトがあり、実験ブランチを含むフォークがあります。分岐にプッシュする前に、開発ブランチから実験ブランチにrebase
変更する必要があります。次のようになります:
git checkout experimentalbranch
git fetch remoterepo
git rebase remoterepo/developmentbranch
この時までに、私は対立にぶつかりました。ただし、これらの変更のいずれにも精通していない(変更をすぐにマージしなかったため、数週間分の変更をリベースしています)。また、rebase
を行うのは初めてです。私はmerge
にもっと慣れています。
メルドでは、通常は<<LOCAL||REMOTE>>
はmerge
を表し、非常に直感的に聞こえます。しかし、rebase
では、<<HEAD||COMMIT MESSAGE>>
。 HEAD
とは誰ですか?それは開発ブランチのHEAD
ですか?開発ブランチの最新のコードですか、それとも他の場所ですか?
このセクションでは、応答として求められる欠陥を確認します:
HEADは誰ですか?
HEAD
:リポジトリの現在のコミット。ほとんどの場合、HEADはブランチ内の最新のコミットを指しますが、そうである必要はありません。HEAD
は単に「現在レポが指しているものを意味する」 at」。
HEAD
が参照するコミットがブランチの先端ではない場合、これは「detached head
"。
開発ブランチのHEAD?
マージまたはリベースが行われた瞬間に、HEAD
作成またはリファクタリングされたコミットを指すようにすぐに渡されますおよびしたがって、開発を指しますブランチ。
git bash
コミットがリストされているthe HEAD
の状況を見ることができます:
# Normal commit list
git log
# List of commit in a single line
git log --oneline
# All commits graphically-linear (Recommended as alias)
git log --all --graph --decorate --oneline
このセクションでは、_how_がユーザーによって実行されるいくつかのアクションを処理するのがわかります
ユーザーが次に進むとき:
# Command to change from the branch to the current one to experimentalbranch
git checkout experimentalbranch
# Command that traverses the typical workflow to synchronize its local repository with the main branch of the central repository (remoterepo)
git fetch remoterepo
# git fetch Origin
# git fetch Origin branch:branch
# With the command git rebase, you can take all the changes confirmed in one branch (remoterepo), and reapply them over another developmentbranch
git rebase remoterepo/developmentbranch
この時までに、私は対立にぶつかりました。ただし、これらの変更のいずれにも精通していません(変更をすぐにマージしなかったため、数週間分の変更をリベースしています)。また、リベースを行うのは初めてです。私はもっとマージすることに慣れています。
ブランチの結合は2つの方法で行われます。
git merge
git rebase。
注:
例では、次のツリーを使用します:
* a122f6d (HEAD -> remoterepo) Commit END
* 9667bfb Commit MASTER
| * b9bcaf0 (Origin/experimentalbranch, experimentalbranch) Commit 3
| * 110b2fb Commit 2
| * e597c60 Commit 1
|/
* 0e834f4 (Origin/remoterepo) First commit
最もよく知られている形式はgit merge
。各ブランチの最後の2つのスナップショットと両方の共通の祖先の間の3つのバンドへの融合を実行し、変更が混在する新しいコミットを作成します。
例えば :
git checkout remoterepo
git merge experimentalbranch
それは私たちを作り出すでしょう:
* 003e576 (HEAD -> remoterepo) Merge branch 'experimentalbranch' in remoterepo
|\
| * b9bcaf0 (Origin/experimentalbranch, experimentalbranch) Commit 3
| * 110b2fb Commit 2
| * e597c60 Commit 1
* | a122f6d Commit END
* | 9667bfb Commit MASTER
|/
* 0e834f4 (Origin/remoterepo) First commit
git rebase
基本的には1つのブランチで確認された変更を1つずつ収集し、別のブランチでそれらを再適用する。
リベースを使用すると、ローカルでリモートリポジトリにアップロードされていないコミットに適用されるたびに競合を回避できますが役立ちます。後者に注意を払わず、パートナーが影響を受ける変更を使用する場合は、これらのタイプの競合は通常修復が困難ですであるため、必ず問題が発生します。
例えば :
git checkout remoterepo
git rebase experimentalbranch
* f8a74be (HEAD -> remoterepo) Commit END
* 4293e9d Commit MASTER
* b9bcaf0 (Origin/experimentalbranch, experimentalbranch) Commit 3
* 110b2fb Commit 2
* e597c60 Commit 1
* 0e834f4 (Origin/remoterepo) First commit
起源とは何ですか?
Origin
:gitがメインのリモートリポジトリに与えるデフォルト名。ボックスには独自のリポジトリがあり、ほとんどの場合、自分と同僚全員がプッシュするリモートリポジトリにプッシュします。そのリモートリポジトリはほとんどの場合Originと呼ばれますが、そうである必要はありません。