【Git】–no-ff オプションを付け忘れたマージをやり直す方法

スポンサードリンク

git merge --no-ff <branchname> とするところを間違えて git merge <branchname> と –no-ff オプションをつけ忘れて実行してしまいました><。

今回は、git の過去を改変して –no-ff オプションをつけたマージをやりなおす方法をノートいたします。ローカル環境です。

解決のポイント

  • git reflog でマージ前に戻る。
  • git reset --hard HEADgit reset --hard ORIG_HEAD では解決できなかった。
  • git reset --hard MERGE_HEAD だったら上手く解決できたのかもしれない(未検証)。

補足

  • HEAD: 最新のコミットに対するハッシュ値の別名
  • ORIG_HEAD: 最新の一つ手前のコミットに対するハッシュ値の別名
  • MERGE_HEAD: マージされたブランチの最新のコミットに対するハッシュ値の別名

“【Git】–no-ff オプションを付け忘れたマージをやり直す方法”の続きを読む

【Git】stash などを使わなくてもマージやブランチ操作ができるケース

状況

  1. ブランチでコミット、作業完了
  2. master ブランチへマージし忘れた。
  3. 別の作業を開始して、編集途中。ファイルのへの変更などが既に保存されている。作業ディレクトリには変更があるがステージへは追加していない。

こんな時、ブランチで作業完了時点で master へマージして、新しいブランチを作って作業するべきだった><、とか、だから stash して辻褄を合わせなきゃ><、とか思っておりました。

しかし、特別な退避操作は必要ありませんでした。

作業ディレクトリは編集途中の状態のまま、マージやそのためのチェックアウトをすることができました。

“【Git】stash などを使わなくてもマージやブランチ操作ができるケース”の続きを読む


スポンサードリンク

【Git】修正した一部分だけを直前のコミットに含める方法

やりたいこと

  1. コミット終了、次の作業へ Go!
  2. ファイル編集中に、前回コミットに含めるべき修正に気がついた><。

編集した一部分のみ直前のコミットへ含め、その後、残りの修正を普通にコミットしたい。

使用する Git コマンド

# 対話的にハンクをインデックスへ追加
git add --patch <pathspec>

# 直近のコミットを変更してコミット
git commit --amend
  • ハンク: 変更点の塊のこと

“【Git】修正した一部分だけを直前のコミットに含める方法”の続きを読む

【Git】【Windows】P4Merge の導入、設定をノート

P4Merge インストール

  1. Visual Merge and Diff Tools | Perforce からダウンロード
  2. [Select Features] では [Visual Merge Tool(P4Merge)] のみ選択し、他は [This feature will not be installed and will be uninstalled if already installed] を設定してインストールしないようにして進める。

“【Git】【Windows】P4Merge の導入、設定をノート”の続きを読む

【Windows】【Git】gitk の文字化けを解消する設定

設定コマンド

# gitk の文字化けを解消
git config --global gui.encoding utf-8

設定ファイル

[gui]
    encoding = utf-8

“【Windows】【Git】gitk の文字化けを解消する設定”の続きを読む

【Git】管理下プロジェクトの zip ファイルを作成する git コマンド

ポイント

  • git archive で指定したブランチのスナップショットを生成

コマンド

# プロジェクトディレクトリの下に最新のスナップショットを作成
# --prefix="directory/prefix": フォルダやファイル名を接頭辞として追加
git archive master --format=zip > testproject.zip

“【Git】管理下プロジェクトの zip ファイルを作成する git コマンド”の続きを読む

【Git】今週学んだことのノート

フォルダ

  • .git のあるフォルダ名は自由に変更して問題ない。

マージ

“【Git】今週学んだことのノート”の続きを読む

【Git】修正した内容を別のブランチへとチェックアウトで移動できない時に git stash を使って解決するときの流れメモ

開発作業をしていて、いくつかファイルを修正後にその開発用のブランチ new-feature で作業しておらず master で作業していたことに気がつきました><。

どうしましょう?

別のフォルダに変更をコピーしておいて、new-feature ブランチを作ってチェックアウト、コピーを被せれば一応解決できそうですけれども。。。

Git で解決する方法を探ってみました。

想定する状況

  • new-feature ブランチを作成・チェックアウトしてから行う作業を、master ブランチで行ってしまった。
  • まだコミットは 1 度も行っていない。

“【Git】修正した内容を別のブランチへとチェックアウトで移動できない時に git stash を使って解決するときの流れメモ”の続きを読む

【Git】GitHub Flow で開発をした時の流れの記録♪

にて、リモートリポジトリとの結びつきを壊さず、かつ、リモートリポジトリを簡潔に保てるような開発手法の必要性を痛切に感じました><。

そこでその投稿でも紹介しました

を参考に、GitHub Flow で開発をしてみてうまくいきましたので、その時に使ったコマンドや流れをノートいたします♪

こちらのページでは、図解に加え、実際に使用するコマンドも例示されており、GitHub Flow を始めてみるのに大変助けとなったページですの♪

なお、参考ページと異なる点として、新規のリポジトリではなくて、既存のリポジトリに GitHub Flow を導入しております。

“【Git】GitHub Flow で開発をした時の流れの記録♪”の続きを読む

【Git】ローカルからリモートリポジトリに push できない問題を解決するまでの記録!

ローカルで一区切りついたリポジトリをリモートに push し、その後も開発を続けておりました。

再び一区切りつきましたので、再度 push しようとしたところ、エラーです><。

今回はそんな状態から無事にリモートリポジトリへ push できるようになったところまでの記録をノートいたしました!

ポイント

  1. 作業用フォルダをクリーンな状態、git status で何も変更が表示されない状態、にしてから操作する。そうすれば、失敗してもこの状態に戻ることができる。
  2. ローカルリポジトリとリモートリポジトリを繋いだ状態にするには、ローカルブランチにリモートブランチから fetch → merge する。このとき、作業用フォルダの状態は、fetch する前のローカルの状態になるように作業する。 merge は一筋縄では行かないことが予想されるので、pull ではなく、fetch → merge と少しずつ進める。
  3. その後、push できるまで開発などを進め、リモートリポジトリへ push する。

問題の発生した状況

$ git push origin master
To http://111.11.1.1/gitremote/origin
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'http://111.11.1.1/gitremote/origin'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e. g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

“【Git】ローカルからリモートリポジトリに push できない問題を解決するまでの記録!”の続きを読む