<リモートブランチを取得してローカルの状態を更新する方法>
例:リモートブランチ「feature/123456」
◯pull を使う場合
gitコマンド
git fetch origin
git reset --hard origin/feature/123456
・[git pull]は、内部的に[git fetch]と[git merge]を実行する。
・ローカルに変更がある場合、その変更とリモートの変更が自動的にマージされる。
・コンフリクトが発生した場合、手動で解消し、マージを続行する必要がある。
◯reset を使う方法
gitコマンド
git fetch origin
git reset --hard origin/feature/123456
<リモートブランチ「master」の内容をブランチ「feature/123456」へ反映する場合>
◯rebase を使う場合
gitコマンド
# master ブランチに切り替えて、最新の変更を取得
git checkout master
git pull origin master
# feature/123456 ブランチに切り替える
git checkout feature/123456
# リモートの最新情報を取得
git fetch origin
# master ブランチの変更をリベースして feature/123456 に反映する
git rebase origin/master
◯merge を使う場合
gitコマンド
git checkout feature/123456
git fetch origin
git merge origin/master
◯メモ
※順次追記予定
git merge:
・2つのブランチの履歴を統合する。
・マージ先ブランチ(例:feature/123456)の履歴のみ書き換えられ、マージ元ブランチ(例:master)の履歴は書き換えられない?
git rebase:
・リベース元ブランチ(例:master)の最新のコミットを、リベース先ブランチ(例:feature/123456)の最新の変更の上に再適用する。
・リベース先ブランチ(例:feature/123456)の履歴のみ書き換えられ、リベース元ブランチ(例:master)の履歴は書き換えられない。
◯イメージ図
<マージ>
○マージ前
A---B---C master
\
D---E---F feature/123456
○マージ後
A---B-------C master
\ \
D---E---F---M feature/123456
※ M:マージコミット
<リベース>
○リベース前
A---B---C master
\
D---E---F feature/123456
○リベース後
A---B---C master
\
D'---E'---F' feature/123456
<マージの取り消し>
◯コミット前の場合
変更内容ごと取り消す
gitコマンド
git merge --abort
◯コミット済みの場合
コミット履歴だけを取り消し、変更はステージングに保持する
gitコマンド
git reset --soft HEAD^
コミット履歴と変更内容ごと取り消す
gitコマンド
git reset --hard HEAD^
履歴を残したままマージの変更を取り消す
gitコマンド
git revert -m 1 <マージコミットのハッシュ>
※-m 1 は、最初の親(通常はベースブランチ)を指す。
<ファイルの変更の取り消し>
ステージされたファイルを取り消す
gitコマンド
git reset HEAD <ファイル名>
例
c:\workspace\projectA>git status
On branch develop
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: .settings/org.eclipse.wst.common.component;
c:\workspace\projectA>git reset HEAD .settings/org.eclipse.wst.common.component
Unstaged changes after reset:
M .settings/org.eclipse.wst.common.component
c:\workspace\projectA>git status
On branch develop
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .settings/org.eclipse.wst.common.component
no changes added to commit (use "git add" and/or "git commit -a")
c:\workspace\projectA>
未ステージのファイルの変更を取り消す
gitコマンド
git checkout -- <ファイル名>
例
c:\workspace\projectA>git status
On branch develop
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .settings/org.eclipse.wst.common.component
no changes added to commit (use "git add" and/or "git commit -a")
c:\workspace\projectA>git checkout -- .settings/org.eclipse.wst.common.component
c:\workspace\projectA>git status
On branch develop
nothing to commit, working tree clean
c:\workspace\projectA>