ツール:git

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
ツール:git [2020/05/19 14:07] – [タグ] mumeiyamibitoツール:git [2024/03/13 16:26] (現在) – [コミット間の移動 (過去の状態に戻す)] mumeiyamibito
行 101: 行 101:
     * ''--soft'': ''--hard'' の代わりに与えるオプションで、作業ディレクトリの内容は維持する     * ''--soft'': ''--hard'' の代わりに与えるオプションで、作業ディレクトリの内容は維持する
     * ''HEAD^'': 直前のコミットを示す     * ''HEAD^'': 直前のコミットを示す
 +
 +  * 直前のコミット削除 (マージコミットの完全削除)\\ <code bash>$ git reset --hard ORIG_HEAD</code>
 +    * push 後には使えない。
 +    * push 後の削除は、revert コマンドを使って、前の状態に戻した履歴を残す必要がある。\\ <code bash>$ git revert -m 1 MERGE_COMMIT</code>
 +      * ''-m'' で残す親を指定する。
 +    * 参考サイト: [[https://qiita.com/chihiro/items/5dd671aa6f1c332986a7 | 【git】マージしたけどやっぱりやめたい時のやり方4種類 - Qiita]]
  
   * 指定コミット以降の削除\\ <code bash>$ reset --hard COMMIT</code>   * 指定コミット以降の削除\\ <code bash>$ reset --hard COMMIT</code>
行 118: 行 124:
         * ''drop'': コミットの削除 (conflict が起こった場合、conflict を解消するために何度も質問される)         * ''drop'': コミットの削除 (conflict が起こった場合、conflict を解消するために何度も質問される)
  
-==== コミット間の移動 ====+==== コミット間の移動 (過去の状態に戻す) ====
   * 特定のコミットに移動する場合 (ただし、ローカルに変更があった場合は、変更ファイルの状態を維持する)\\ <code bash>$ git checkout COMMIT</code>   * 特定のコミットに移動する場合 (ただし、ローカルに変更があった場合は、変更ファイルの状態を維持する)\\ <code bash>$ git checkout COMMIT</code>
   * ローカルの変更を無視して、特定のコミットに移動する場合 (変更ファイルも特定コミット状態になる)\\ <code bash>$ git checkout -f COMMIT</code>   * ローカルの変更を無視して、特定のコミットに移動する場合 (変更ファイルも特定コミット状態になる)\\ <code bash>$ git checkout -f COMMIT</code>
行 125: 行 131:
   * 特定のファイルのみ特定のコミットに戻す (ローカルの変更無視)\\ <code bash>$ git checkout -f COMMIT FILE</code>   * 特定のファイルのみ特定のコミットに戻す (ローカルの変更無視)\\ <code bash>$ git checkout -f COMMIT FILE</code>
     * ''FILE'': 戻したいファイル     * ''FILE'': 戻したいファイル
 +  * 特定のファイルの過去のバージョンを別ファイルとして取り出す
 +    * cat-file を使う方法\\ <code bash>$ git cat-file -p COMMIT:FILE1 > FILE2</code>
 +    * show を使う方法\\ <code bash>$ git show COMMIT:FILE1 > FILE2</code>
 +      * ''COMMIT'': コミットのハッシュ値
 +      * ''FILE1'': 戻したいのファイル
 +      * ''FILE2'': 保存先
  
 ==== タグ ==== ==== タグ ====
行 137: 行 149:
 </code> </code>
   * タグの一覧表示\\ <code bash>$ git tag</code>   * タグの一覧表示\\ <code bash>$ git tag</code>
-  * タグの削除\\ <code bash>$ git tag -d "TAG"</code>>+  * タグの削除\\ <code bash>$ git tag -d "TAG"</code>
     * ''TAG'': タグ名     * ''TAG'': タグ名
 +  * タグの push (タグはリモートにデフォルトでは反映されない)\\ <code bash>$ git push origin --tag</code>
  
 ==== ブランチ ==== ==== ブランチ ====
   * ブランチの作成 (コミットを分岐させる時に使う; 仕様で迷った場合等)\\ <code bash>$ git branch BRANCH_NAME</code>   * ブランチの作成 (コミットを分岐させる時に使う; 仕様で迷った場合等)\\ <code bash>$ git branch BRANCH_NAME</code>
     * ''BRANCH_NAME'': ブランチ名     * ''BRANCH_NAME'': ブランチ名
-  * ブランチの一覧表示\\ <code bash>$git branch</code>+  * ブランチの一覧表示\\ <code bash>$ git branch</code>
   * ブランチの削除 (マージ済みのブランチのみ)\\ <code bash>$ git branch -d BRANCH_NAME</code>   * ブランチの削除 (マージ済みのブランチのみ)\\ <code bash>$ git branch -d BRANCH_NAME</code>
     * ''BRANCH_NAME'': ブランチ名     * ''BRANCH_NAME'': ブランチ名
-  * ブランチの削除\\ <code bash>$ git branch -D BRANCH_NAME</code>+  * ブランチの削除 (ローカル)\\ <code bash>$ git branch -D BRANCH_NAME</code>
     * ''BRANCH_NAME'': ブランチ名     * ''BRANCH_NAME'': ブランチ名
 +  * ブランチの削除 (リモート)\\ <code bash>$ git push origin :BRANCH_NAME</code>
 +    * ''BRANCH_NAME'': ブランチ名
 +  * ブランチの名前変更 (ローカル)\\ <code bash>$git branch -m BRANCH_NAME NEW_NAME</code>
 +    * ''BRANCH_NAME'': 変更したいブランチ名
 +    * ''NEW_NAME'': 変更後のブランチ名
   * ブランチ間の移動\\ <code bash>$ git checkout BRANCH_NAME</code>   * ブランチ間の移動\\ <code bash>$ git checkout BRANCH_NAME</code>
     * ''BRANCH_NAME'': ブランチ名     * ''BRANCH_NAME'': ブランチ名
行 169: 行 187:
 </code> </code>
           * D-E-F が G へとマージされるが、D-E-F が別ブランチである情報を残っている           * D-E-F が G へとマージされるが、D-E-F が別ブランチである情報を残っている
 +          * mercurial はデフォルトでこっちの挙動になる。
         * fast-forward のマージ後の例:\\ <code>-A-B-C-D-E-F-</code>         * fast-forward のマージ後の例:\\ <code>-A-B-C-D-E-F-</code>
           * D-E-F がマージされ一本化する           * D-E-F がマージされ一本化する
           * HEAD が移動するだけなので、G が作られない           * HEAD が移動するだけなので、G が作られない
 +  * ブランチのマージ (no-fast-forward)\\ <code bash>
 +$ git checkout MERGED_BRANCH
 +$ git merge --no-ff MERGE_BRANCH
 +</code>
 +    * ''MERGED_BRANCH'': マージ先ブランチ (たいていは master)
 +    * ''MERGE_BRANCH'': マージするブランチ
 +
 +==== コミット日時の変更 ====
 +  * 過去に管理していなかったファイルをコミットする際に、開発日時にしたい場合がある。
 +  * その場合にコミット日時を変更する必要があるが、git には、実際のコミット日時と author_date が設定されており、ここでは author_date を変更する方法を紹介する (git log で表示されるのは author_date の方)。
 +  * コミット直後に日時を変更する例: \\ <code bash>$ git commit --amend --date='Fri Aug 28 00:00:00 2019 +0900'</code>
 +    * ''Fri'': 曜日を金曜日に設定する (合ってないとこの項目は無視される)
 +    * ''Aug'': 8 月に設定する
 +    * ''28'': 28 日 (8月の) に設定する
 +    * ''00:00:00'': 00:00:00 に設定する
 +    * ''2019'': 2019 年に設定する。
 +    * ''+0900'': タイムゾーンを +0900 に設定する
 +  * 過去のコミットの日時を変更する場合
 +    - 修正したいコミットの直前のコミットを指定する\\ <code bash>$ git rebase -i COMMIT</code>
 +    - エディタが起動するので、コミット日時を変更したいコミットの左側を ''pick'' から ''edit'' にする
 +    - コミット直後に日時を変更する例のように ''commit --amend'' で日時を指定する
 +    - 日時を反映させる\\ <code bash>$ git rebase --continue</code>
 +
 +==== git のリモート先の変更 ====
 +  - 現在のリポジトリに適用されているリモートの URL を確認する。\\ <code bash>$ git remote -v</code>
 +  - 移行先の新しい URL を設定する。\\ <code bash>$ git remote set-url origin NEW_URL</code>
 +    * ''NEW_URL'' 移行先の URL
 +  * 参考サイト: [[https://qiita.com/minoringo/items/917e325892733e0d606e | gitのremote urlを変更する(レポジトリ移行時) - Qiita]] 
  
  • ツール/git.1589864833.txt.gz
  • 最終更新: 2020/05/19 14:07
  • by mumeiyamibito