Gitまとめ

Gitとは??

GitとはSubversionのバージョン管理を行うことが出来るもの。
複数人で何か開発するときに作業を分担して行うときに力を発揮する。
以下のサイトがとても参考になるのでこちらもどうぞ。

https://qiita.com/y_ito/items/91cd96659a56ec9f9dbf

主な用語

ここに記載している内容は個人的な理解なので鵜呑みしないように。
なるべく専門用語を使わずに解説したつもりです。
(ネットや書籍で説明しているものとは相違点が多いです。)

Git

分散管理構成バージョン管理システムのこと。

リポジトリ

Gitで管理されている資材がまとまっているもの

ブランチ(枝、派生先)

Git管理しているバージョンの単位、(これがGitのいいところ!)

チェックアウト(取得)

リモートブランチのファイルを取得することやブランチの切り替えのことを指す

クローン

複製、先述したリポジトリを自身のローカル(Cドライブ等)にコピーすること

リモートブランチ

みんなで触るブランチ、基本的には直接触らないこと!
※取り扱いに注意

ローカルブランチ

一人で触るブランチ、ここで修正したものをリモートブランチに反映させていく

 ブランチを切る

ブランチを作成することと同義

 ブランチのマージ

 ブランチを合成させること。具体例として、マスターブランチをもとに作った開発ブランチの変更点をマスターブランチに反映させることをいう。

 マスターブランチ

単に「マスター」とも。リリースのためのブランチで、マスターブランチはすべてのテストが完了した状態であることがほとんど。
後述する開発ブランチは基本的にマスターブランチを起点に作成される。

開発ブランチ

文字通り開発中のブランチ。このブランチを作成する粒度はプロジェクトの方針によって異なるが、基本的に一つの課題に対して一つのブランチが作成されることが多い。
その理由の一つとして、複数の課題を一つのブランチで開発しようとすると、どれか一つでも課題が達成されないでマスターブランチなどにマージされた場合、発見が困難になる。

主なGitコマンド

 Clone(リポジトリのコピーを取得)

既に作成されているGitリポジトリのコピーを取得する
$ git clone http://example/sampledirectory/sampleproject.git

Branch(ブランチの作成)

現在いるブランチの内容を別名コピーしたブランチを作成する。(ブランチの移動は行われない)
 $ git branch branch_name

Checkout(ブランチの切り替え以外にもつかうよ!!)

ブランチのチェックアウト
作成したブランチをチェックアウトする(作業したいブランチへの移動)
$ git checkout branch_name

ファイルのチェックアウト

ファイルを選択してチェックアウト
$ git checkout source/xxxproject/XXXfile.txt

複数ファイルをチェックアウトする場合は「.」を使う
$ git checkout source/xxxproject/.

Tips
修正したファイルをブランチのチェックアウト時の状態に戻したいときにも使える!

https://qiita.com/macer_fkm/items/ea2337a9b504b982c295

Status(変更内容の確認)

修正・追加内容の確認
ファイルの追加やコミットを行う前にファイルの変更を確認する際に使用する
$ git status

 Add(変更ファイルの追加)

コミットしたいファイルの追加
1つずつ選択する場合(こっちのが安全)
$ git add file_name

編集したファイル全部選択する場合(編集したファイルが少ない時はこっちでも)
$ git add .

Commit(追加ファイルの確定)

コミット
追加したファイルを確定
$ git commit –m “commit_reason”

$ git commit –amend –no-edit
ステージされた内容と直前のコミットとの結合をする。コミットした後に漏れていたファイルに気付いた時やちょとした修正をして前のコミットに加えたい場合などに便利。
「どのタイミングでコミットしようか?」と迷うくらいならとりあえずコミットして、それからこのコマンドでどんどん追加していけばいい。
 “–no-edit” を付けないとエディタが立ち上がってコミットログ編集画面になってしまう。

$ git commit –amend [-m <コミットメッセージ>]
上と同じだがコミットログをついでに編集したい場合は “–no-edit” を付けずに実行する。
この記事で以前は「直前のコミットのコミットメッセージを変更する」と説明していたが、それはインデックスに何も追加していない状態でこのコマンドを実行すれば結果的にはコミットメッセージの変更になるということ。

https://qiita.com/y_ito/items/91cd96659a56ec9f9dbf

Push(リモートブランチへの反映)

プッシュ
リモートリポジトリにコミット内容を反映、大体Pullしてからやる
$ git push origin remote_branch_name
※pushできないときはpush –fで強制プッシュできる。リモートリポジトリの内容を強制的に上書きするため使い方には注意

Tips
Pushがrejectされる
https://qiita.com/katsuyuki/items/8e03e5eb4223912a08c5

Pull(リモートリポジトリの変更内容を取得)

プル
ローカルブランチにリモートリポジトリの変更内容を取り込む、Pushの前にすることが多い
$ git pull

Fetch(リモートリポジトリの最新状態を取得)

フェッチ
リモートリポジトリの最新状態をローカルに反映するコマンド

リモートブランチの最新状態を取得(リモートで削除されたブランチも同期)
$ git fetch -p

Rebase(ブランチの直列化)

リベース
あるブランチAをもとにブランチBを作成し、ブランチBでの変更をブランチAに取り込むときコンフリクトを起こした際にも使用することがあるコマンド。
$ git rebase branchA

Ex
あるブランチAをもとにブランチBを作成してブランチB上で開発を行っていた際に、ブランチAにコミットが行われ、ブランチBをブランチAにマージしようとするとコンフリクトを起こす。・・・fastForwardMargeが出来ない!!!

Stash(作業内容の退避)

スタッシュ
作業中のブランチの作業内容を一時的に保存したいときに使うコマンド
ブランチのチェックアウト(移動)をするときなどに便利

ブランチの作業内容を退避
$ git stash save

退避した作業内容を復活
$ git stash pop

ブランチのコピー
$ git checkout base_branch_name –b new_branch_name

マスターブランチから派生したブランチをもとに開発をしたい時などに使えるコマンド
例)ver1.0を半年後にver1.1としてリリースしたい。じゃあ、開発しますか。Ver1.1のリポジトリが作成したからそこからissueごとにブランチ切って開発してください。
$ git checkout develop/1.1.0 –b issues/addNewModify
-bオプションにより別のブランチ名としてチェックアウトできる

横着しないで派生元ブランチに移動
$ git checkout originalBranch

開発ブランチを作成
$ git branch newDevelopBranchName

プルリクエスト

単に”PR”や”プルリク”などと訳されることが多い。
基本的にはgit push をするとgitbucket上でほかのブランチに変更内容を取り込んでよいかをレビューするときに用いられる。

マージ

 執筆中

 RebaseとStashを組み合わせたリベース

 利用例
 今いるブランチはissue/add_modify

作業ブランチ移ろうかな
$ git checkout develop/1.1.0

error: Your local changes to the following files would be overwritten by checkout:
 document/01_release/specifications/XXXspecifications.xlsx
 Please commit your changes or stash them before you switch branches.
 Aborting

エラーでチェックアウトできない(ブランチの切り替えができない)!!
作業内容を退避しよう
$ git stash save

何退避したんだっけ?
$ git stash list

改めてチェックアウトしよう
$ git checkout develop/1.1.0

リベースするか
さっきstashしたブランチをチェックアウト
$ git checkout issue/add_modify

リベースしよう
$ git rebase develop/1.1.0

リベースしたブランチに退避した作業内容を取り込もう!
$ git stash pop

おわり

 チェリーピック

他のブランチのコミット内容を作業中のブランチに取り込みたい

取り込みたいコミットがあるブランチに移動する
※移動できないときはStash(作業内容の退避)を参照のこと
$ git checkout branchA

ログコマンドで取り込みたいコミットのコミット番号を探す
$ git log
 commit 1efcdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx9
 Author: buruyuki
 Date: Fri May 10 10:15:22 2019 +0900999 処理一覧更新

作業ブランチに戻る
$ git checkout branchB

チェリーピックコマンドを実施
$ git cherry-pick -m 1 9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1
-m コマンドはマージコミットのときに付与する。基本的には1を使うと思う。詳細は以下参照

http://te2u.hatenablog.jp/entry/2013/11/02/130740

ステータスを確認
$ git status
 Unmerged paths:
 (use “git add …” to mark resolution)
 both modified: document/01_release/Specifications/XxxSpecifications.xlsx

変更したファイルを追加する。
$ git add document/01_release/Specifications/XxxSpecifications.xlsx

ステータスを確認
$ git status
 Changes to be committed:
 modified: document/01_release/Specifications/XxxSpecifications.xlsx

コミットする(チェリーピックおつかれさま)
$ git commit
※チェリーピック時はコミットメッセージ-m コマンドを追加しない。

ブランチ名が(issues/244_Xxx_Comment_keep|CHERRY-PICKING)
こんな感じだったらまだチェリーピックが終わってない...

チェリーピックをやめたいときは...
$ git cherry-pick –abort

コミットを取り消す(ロールバック)

直前のコミットをなかったことにするには
$ git reset –soft HEAD^

また、オプションは以下
–soft…ワークディレクトリの内容はそのままでコミットだけを取り消したい場合
–hard…コミットを取り消した上でワークディレクトリの内容も書き換えたい場合
HEAD^…直前のコミットを意味する
HEAD~{n}…n個前のコミットを意味する
HEAD^やHEAD~{n}の代わりにコミット番号を書いてもよい(直前のコミット以外はこっちのほうがいいかも)

https://qiita.com/shuntaro_tamura/items/06281261d893acf049ed

CRLFについて

Gitに新規でファイルをaddしたときに「CRLFはLFに変換されます」のようなwarnログが出た場合はテキストエディタで(\r\n→\n)で置換してからaddすればwarnログは出てこない。
GitがUNIXで開発されているため、ローカルの開発環境がWindowsの場合に起きる

追記
$ git config –global core.autocrlfがtrueまたはinputで設定されている場合、gitが改行コードを自動で変換してくれるので上記手順を踏まずとも問題ない。(ちな、ブルはinputで設定してます)

https://qiita.com/uggds/items/00a1974ec4f115616580

addを取り消す

$ git reset HEAD sample.txt

https://qiita.com/nabezokodaikon/items/7ee4900d28d8d863978e

その他

 GitBashのショートカットとか

https://www.granfairs.com/blog/staff/gitbash-setting-shortcut

リベース(コミットの統合)

$ git rebase –i commitNo

指定するコミット番号はまとめたいコミットのひとつ前のコミット番号を指定

https://qiita.com/tsuuuuu_san/items/f708a9f7ea8ab8eb6945
https://dev.classmethod.jp/tool/git/git-rebase-fixup/
http://blog.katty.in/853

文字を入力し終わったら、ESCして:wqを打つ。

※メモ
コミットログを破棄する場合はfixupを指定する。

追跡ファイルの削除

$ git clean [-d] -n # 削除対象の確認
$ git clean -f # 削除実行
$ git clean -d -f # ディレクトリも含めて削除

コメントを残す

メールアドレスが公開されることはありません。