[解決済み] 異なるブランチの特定のコミットからブランチを作成する方法
質問
masterブランチでいくつかのコミットを行い、devブランチにマージしました。
devブランチの特定のコミットからブランチを作成したいのですが、masterブランチで最初にコミットされたコミットです。
コマンドを使いました。
git checkout dev
git branch <branch name> <commit id>
しかし、これでは期待したdevブランチではなく、masterブランチからブランチが作成されます。コミットIDはmasterブランチとdevブランチとで同じです。 そこで、異なるブランチで同じコミットIDを区別するにはどうしたらよいでしょうか。
追記: githubに例を作りました。 https://github.com/RolandXu/test_for_branch
コマンドを使いました。
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
私が期待するのは、テストブランチが aa.txt bb.txt cc.txt を含んでいることです。しかし、テストブランチには aa.txt と cc.txt しか含まれていません。masterブランチから作成された可能性が高いです。
どのように解決するのですか?
もし、この形式の
branch
コマンドを使用する場合(始点付き)には、どこで
HEAD
がどこにあるかは関係ありません。
何をしているのか
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
-
まず
HEAD
をブランチのdev
, -
次に、コミット時に新しいブランチを開始する
07aeec98
. このコミットには bb.txt がありません (あなたの github リポによると)。
新しいブランチを開始したい場合 をチェックアウトした場所で開始したい場合。 という場合は、開始点を指定せずにブランチを実行することができます。
git branch test
または、他の方が回答されているように、ブランチとチェックアウトを1つの操作で行うことができます。
git checkout -b test
という事実に戸惑っているのではないでしょうか。
07aeec98
はブランチの一部であり
dev
. 確かにこのコミットは
dev
の最新コミットに到達するために必要な変更です。
dev
. しかし、それらは最新の
dev
の履歴にあるわけではありません。
07aeec98
.
8480e8ae
(bb.txt を追加した場所) は、例えば、履歴にない
07aeec98
. から分岐した場合
07aeec98
によって導入された変更を取得することはできません。
8480e8ae
.
言い換えると、AブランチとBブランチをCブランチにマージし、Aのコミットで新しいブランチを作成した場合、Bで導入された変更を取得することはできません。
同じように、master と dev という二つの並行したブランチがあり、dev でマージしたとします。master のコミット (マージより古いもの) からブランチアウトしても、dev の変更は得られません。
もし、あなたが
永久に
master からの新しい変更を自分の機能ブランチに統合したい場合、マージする必要があります。
master
をマージしてください。しかし、これは機能ブランチにマージコミットを作成することになります。
機能ブランチを公開していない場合は、更新された master にリベースすることもできます。
git rebase master featureA
. 起こりうるコンフリクトを解決する準備をしておいてください。
マージコミットなしで機能ブランチで作業でき、なおかつmasterの新しい変更と統合できるようなワークフローを希望する場合、以下をお勧めします。
- すべての新しい機能ブランチを master のコミットに基づかせます。
-
ブランチを作成する
dev
ブランチを作成します。 -
機能ブランチが master の新しい変更とどのように統合されるかを確認する必要がある場合は、master と機能ブランチの両方をマージして
dev
.
にコミットしないでください。
dev
に直接コミットせず、他のブランチをマージするときにのみ使用してください。
例えば、機能Aと機能Bに取り組んでいる場合。
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
ブランチをマージして
dev
ブランチにマージして、新しいマスターでうまく動くかどうかチェックします。
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ / /
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
機能ブランチでの作業を続けながら、master と機能ブランチの両方から新しい変更点を
dev
に定期的にマージすることができます。
a---b---c---d---e---f---g---h---i----- -master
\ \ \ \
\ \ \--x'---k'---i'---l' -dev
\ \ / / /
\ \-x---------- / / -featureB
\ / /
\-j---k-----------------l------ -featureA
新機能を統合する段階になったら、機能ブランチをマージします(
dev
をマスターに入れる。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] 既存の、プッシュされていないコミットメッセージを修正するには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] git rebase の取り消し
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] 現在のGitブランチをmasterブランチにする
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Git:コミットに何も追加されていないが、未追跡のファイルが存在する
-
[解決済み】Git Extensions。Win32 エラー 487: cygwinのヒープ用に領域を確保できなかった、Win32エラー0
-
[解決済み】「オリジン/マスターへのプッシュが拒否されました」というエラーが常に発生するのはなぜですか?
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push s...
-
gitコミット発生 ! [リモート拒否] master -> master (pre-receive hook declined) 解決策
-
[解決済み] Git - node_modules フォルダをどこでも無視するようにしました。
-
[解決済み] "would clobber existing tag "を取り除くには?
-
[解決済み] git でディレクトリ階層が異なる 2 つのブランチをマージするには?
-
[解決済み] git update-index --assume-unchanged <file> を元に戻す。
-
[解決済み] エラーです。リベースを使用してプルできません。あなたはステージングされていない変更を持っています