5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

からくりAdvent Calendar 2019

Day 23

心配性が始めるgit管理(確認/修正をするgitコマンド集)

Last updated at Posted at 2019-10-08

2019/10/09追記

はじめに

今年の3月に大学を卒業し、4月からアプリを作る会社に入社した者です。
iOSアプリを作るエンジニアしてます。Androidアプリも勉強してます。

超心配性です。

仕事で当然Gitを使う訳ですが、、、これが新米エンジニアには難しい。
入社直後、.gitignoreの設定をミスってしまい、FilesChangedが7000を超えるトンデモPRを生み出したことがあります。(その後.gitignoreの設定を直したら、今度はなぜか.xcodeprojファイルがぶっ壊れて...と修正に丸々1日潰しました :innocent: )

それ以来、超超心配性な性格も相まって
「.gitignoreの設定反映されてないかな...」
「このままpushしても大丈夫かな...コミット履歴ミスってないかな...」
「mergeのブランチ間違えてないかな...」
と必要以上の心配をすることがあります。

その度に調べるのは大変なので、何かを確認/修正するgitコマンドを中心に紹介します。
随時更新したいです。

何かが心配な時に使うコマンド

コミットログがどうなっているか心配

$ git log

コミットIDがみたい場合 --oneline
HEADの位置をみたい場合 --decorate
ツリーを見たい場合 --graph
など、logのオプションはたくさんあります
参考: https://qiita.com/take4s5i/items/15d8648405f4e7ea3039

.gitignoreがちゃんと働いているか心配

ignoreされたファイルを表示、

$ git status --ignored
On branch develop
(中略)
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

	.DS_Store
	Carthage/
	Pods/
    #...
    #ignoreされたファイル

どのファイルがステージングされてるか心配 -> 一覧を見る

$ git ls-files<img width="327" alt="スクリーンショット 2019-10-08 11.39.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/59749482-6cf1-70fe-4a20-fe020b7b92c6.png">

.gitignore
Podfile
Podfile.lock
README.md
hogeProject/HogeViewController.swift
()

ステージングされたファイルの一覧

merge元のブランチとmerge先のブランチが合っているか心配

featureブランチで編集中に、developブランチに変更が加わり、featureブランチにもその変更を反映したいとき
スクリーンショット 2019-10-08 11.39.10.png

「あれ?featureブランチでmerge叩けばいいんだっけ? :thinking:
ミスっても git revertとかすればいいんですが。初心者心配性エンジニアはそれを知っててもmerge前に1回心配します。

$ git checkout feature
Switched to branch 'feature'

$ git merge develop --no-commit
Automatic merge went well; stopped before committing as requested

マージコミットが作られないけどdevelopブランチの変更が取り込まれた状態になります。
ワーキングツリーを確認してcommitすればちゃんとmergeされた状態になるし、間違えてたらgit merge --abortすれば良さそうです。

addの前に変なファイルがaddされたりしないか心配

$ git add --dry-run <addする予定のファイル>
add 'addする予定のファイル'
# 実際にaddされるわけではない

pushの前に今いるブランチは間違えてないか、push先のブランチは間違えてないか心配

$ git push -n <リモート名> <プッシュ先ブランチ>
To https://github.com/hogehoge/fugafuga.git
   123456..7890ab  local_branch -> remote/branch
# 実際にpushされるわけではない

要は前述の--dry-runと同じです

何かをミスった時に使うコマンド

たとえ 超超超心配性 でも、「ミスっても○○すれば直るから大丈夫だもんね!」というお気持ちになれれば心強いもの。

コミットコメントをミスった -> 直前のコミットを編集

viが開かれ、コミットメッセージを編集できる

$ git commit --amend

コミットそのものをミスった -> コミット取り消し

$ git reset (オプション) HEAD~

resetコマンドはオプションとresetするコミットの指定方法によって色々できます
オプション

  • --soft commitのみ取り消し
  • --mixed commit, add取り消し(オプションなしの場合もこれ)
  • --hardまたは--merge そもそもの変更ごと取り消し

どこまで戻すか

  • HEAD 最新コミットまで戻る(最後のコミット後に変更した内容だけreset)
  • HEAD~またはHEAD^またはHEAD@{1} コミット1つだけreset
  • HEAD~~~またはHEAD^^^(n個~や^をつける)またはHEAD@{n}またはHEAD~n コミットn個reset
    ~^にも一応違いがあるようですが、resetする分にはほとんど違いがないはずです。。。
    https://qiita.com/chihiro/items/d551c14cb9764454e0b9

(2019/10/09追記、コメントありがとうございます :bow: :bow: )
HEADのエイリアスとして@が使えるので、上記のHEAD@として置き換えても可です

git resetもミスった -> reset取り消し

$ git reset --hard ORIG_HEAD

作成するブランチ名をミスった -> ブランチ名変更

$ git branch -m <変更前のブランチ名> <変更後のブランチ名>

マージをミスった -> マージ取り消し

$ git merge --abort

コミットするブランチを間違えた -> cherry-pick

(移動先のブランチに移動してから)
$ git cherry-pick <移動元ブランチでのハッシュ値>

マージしたらコンフリクトした(マージをキャンセルする場合)

$ git merge --abort

さいごに

gitの知識と失敗の経験が身についてきたら心配性も緩和されていくと思うので、要勉強です
失敗するたびに更新して行きたいですね :innocent:
自分の心配性が極端なのは自覚してますが、一息ついて確認するのも大事だと思いますよ。。。

お気持ち

sourcetreeとかgitkrakenとかのgitクライアントを使えばレポジトリの状況が見えやすくなるから心配性も緩和されることに最近気づきました。。。

5
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?