GITのわかりにくいところまとめてみた

目次

  • add/commit/push
  • 上記コマンドを取り消すには?
  • fetch/pull
  • rebase
  • revert
  • git remote originについて

git add/push/commit

  • addとcommitはローカルリポジトリ内で使用するためのもの
    addは資産をローカルのステージング上にアップ
    commitでその資産がローカルリポジトリに反映される
  • pushはcommitした資産をリモートリポジトリに反映するためのもの

リモートとのコンフリクトでpushが失敗した場合

「-f」オプションで強制的にpushする等で対応。

各種コマンドを取り消す方法

git commit

git reset --soft HEAD^

これはgit resetで直前のcommitを取り消すことができる

git add

git reset HEAD

これもgit resetで直前のaddを取り消すことができる

各種コマンド

HEAD

自分が作業している場所を示すポインタ

HEAD^は「一つ前のコミット」を表す。

reset

特定の時点までファイルを巻き戻せる。

--soft

HEADの位置のみ巻き戻す
例:git reset --soft HEAD^→直前のコミットを消す

--mixed

HEADの位置、インデックスを巻き戻す
オプションなしでも同じ結果になる
例:git reset HEAD→インデックスの変更(addしたもの)を消す

--hard

HEADの位置、インデックス、作業ディレクトリを巻き戻す
例:git reset --hard HEAD^→直前のコミットまですべて消す

git fetch/pull

  • fetch : リモートの資産を引っ張ってくる。マージはなし。
  • pull : リモートの資産を引っ張ってくる。マージあり。

違いはマージまでするか否か。

rebase

指定コミットを作り直して、ログをキレイにするためのコマンド

マージとの違い

  • マージ:過去のコミットを全て一つの新しいコミットとして、マージ先にマージされる。
  • リベース:マージ先のブランチの最新コミットにへリベース分のコミットが移動する(過去コミット履歴を含めた状態で)

コミットされたすべての変更を指定先のブランチでも再現できる点でマージとの差別化ができる。

履歴が直線的になるため、ログがきれいなまま保つことができる。

git revert

特定のコミットの変更を取り消す新しいコミットを作成する。

  • 使用シチュエーション
    過去の特定のコミットの変更を取り消したいが、その取り消し自体の履歴も残したい場合。

git resetとの使い分け

リモートのコミットを取り消したい場合は、revertのみしか使用不可。
resetではリモート分は消すことができない。

git remote add origin の origin について

origin とは何か?

  • リモートリポジトリに対するデフォルトの名前(エイリアス)。ローカルのGitリポジトリが、どのリモートリポジトリと連携しているかを示す。
  • 一般的に、GitHubや他のリモートリポジトリサービスからプロジェクトをクローン(git clone)すると、そのリモートリポジトリは自動的に origin という名前で登録される。

資産(リポジトリ)ごとに origin が存在する

  • 各リポジトリごとにリモートリポジトリが設定されており、そのデフォルトのエイリアスとして origin が使用される。
  • 各ローカルリポジトリはそれぞれ異なる origin を持つことができる。異なるリポジトリに対して異なる origin が設定され、それぞれ異なるリモートリポジトリと連携される。

複数のリモートリポジトリを追加可能

  • 1つのリポジトリには、origin 以外にも複数のリモートリポジトリを設定できる。これにより、例えばプライベートなリモートと公開されているリモートの両方にプッシュすることが可能になる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です