2017年08月28日

実践git

Git-Logo-1788C.png

公式サイト:https://git-scm.com/



インストール









1人でgitを使う


準備





基本的な作業



この流れの繰り返し。


リリース作業








複数人でgitを使う


準備






基本的な作業


リモートリポジトリからクローンして、ローカルリポジトリを準備すれば、後は1人でgitを使う流れと同じ。



他のメンバーと作業内容を共有







リリース作業


基本は 1人でgitを使う場合のリリース作業と同じ。





ブランチモデル








困ったときのtips


変更したファイルがたくさんある。ステージするのがたいへん。

  • $ git add .
    "."(ピリオド)を指定するとそのディレクトリ以下の階層すべての変更ファイルがステージの対象となる。

作業ツリー上に、gitで管理してほしくないファイルが存在している。


さっきコミットしたのに、追加を忘れたファイルがあった。


コミットしたコミットメッセージがいまいちだった。書き換えたい。


間違ってステージしてしまった。

  • ステージされているすべてのファイルをもとに戻す場合
    $ git reset HEAD
  • 特定のファイルだけ戻す場合
    $ git reset HEAD <対象ファイルパス>

間違ってコミットした。取り消したい。

  • 1つ前のコミット状態に戻す。ただし、作業ツリー、ステージングエリア上の変更は戻さない。コミットだけ無しにする。
    $ git reset --soft HEAD^

リセット実行したけど、実行前の状態に戻したい。


異なる目的の対応を一気にやってしまった。複数のファイルの変更点がある。分けてコミットしたい。

  • $ git add -p
    "-p" オプションをつけると、ステージする処理をインタラクティブに進める。
    変更ファイルが順に示されるので、コマンド入力でステージする・しないを決定する。コマンドの種類はいくつかあるが、ややこしい操作は無しにして次の操作だけ行えばいい。
    [y]ステージする、[n]ステージしない、[q]操作を中止する。

作業ツリー上の内容が中途半端でまだコミットできないのに、同じ作業ツリー上で、急遽、別の作業を行わないといけなくなった。


細目にコミットしたが、履歴を追うのが大変。まとまりある単位でのコミットにしておけば良かった。マージする前に整理したい。

  • git rebase -i で "squash" を指定してコミットをまとめる。

ブランチを切り替えるの忘れて、コミットしてしまった。

  • まず正しいブランチに切り替える
    $ git checkout <正しいブランチ名>
    コミットIDを使い、間違ったコミットを指定してチェリーピックする。
    $ git cherry-pick &ly;commitID>
    間違ってブランチに戻り、不要なコミットをリセットする。
    $ git checkout <間違ったブランチ名> && git reset --hard HEAD~

違うブランチを削除してしまった。

  • ローカルリポジトリの場合
    reflogで過去の作業から、ブランチ削除の前の状態を確認する。
    復活させたいブランチ名と確認した番号を使い、以下のコマンドを実行する。
    $ git branch <復活させたいブランチ名> HEAD@{確認した番号}
  • リモートリポジトリの場合
    すぐに他のメンバーに確認。リモートリポジトリを触って影響を受けないように連絡と、既に影響を受けてしまった人がいないか確認。
    そのうえで復活操作可能と判断できれば復活させる。すぐの操作が難しいとなればメンバー間で今後について相談する。

    復活手順:
    もしローカルリポジトリにも削除してしまったブランチがなければ、上記手順で復活させる。そのブランチをリモートリポジトリにプッシュする。ただし普通にはプッシュできないので、強制的にプッシュし復活させる。
    $ git push -f <リモートリポジトリ> <復活させるブランチ名>

リモートブランチは他のメンバーに影響を与える可能性が高い
焦って git push -f をしてはダメ。
メンバーに確認して、大丈夫だと確認が取れてから操作すること。

プッシュしたコミットが間違っていたので取り消したい。

  • 基本的にコミットを無かったことにするのはあきらめる。
    リモートブランチは他のメンバーに影響を与える可能性が高いので、コミット履歴を改変しないこと。
    git revert でコミットした歴史は残しつつ、内容だけ差し戻す。
  • もし他メンバーの誰にも影響が出ないことがわかったなら、例外的処置でリモートリポジトリを書き換える。
    まずローカルリポジトリでコミットをリセットする。
    $ git reset --hard HEAD^
    リセットした内容を強制的にプッシュする。
    $ git push -f <リモートリポジトリ> <ブランチ名>

スタッシュした内容を消してしまった。

間違って git stash drop したときや、git stash pop のあとに、うっかり git reset して大事なスタッシュを消してしまった場合。
  • "drop" や "pop" のスタッシュ操作したときに、
    例えば "Dropped refs/stash@{0} (13ce25271878e0763aaaefab44c0b2c52743df51)" と、SHA-1 が示される。これを使って復活させる。
    $ git stash apply <SHA-1>
  • もし、SHA-1 がわからない場合は、
    $ git fsck
    とすると、"dangling commit"(中間ファイルのようなもの)が列挙される。このどれかが消えたスタッシュ。
    上記操作で適用して地道に探してみる。

サーバーの入れ替えがあり、サーバーのアドレスが変わってしまった。


ローカルで1人で作業していたがチーム編成になり、今までの内容をメンバーに展開することになった。






gitの基礎


gitをインストール
gitサーバーのセットアップ
git ブランチについて
git 変更を一時的に退避 stash
git ブランチを合流するマージ
git ブランチを付け替える
git コミット履歴を変更する
git 変更をリセットする
git リモートでの操作
git ファイルの追跡
git リリース準備
git 変更をpatchファイルにする
git コンフリクトに対処する
git 失敗したときの復元




posted by Zorinos at 20:00| Comment(0) | Linux | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください
ブログランキング・にほんブログ村へ