Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Article information
RevisionsShow article in Markdown
Report article
Help us understand the problem. What are the problem?

This post is Private. Only a writer or those who know its URL can access this post.

posted at

updated at

Git講座(実践編)

この記事でのアジェンダ

  • GITの基本的なコマンド
  • やらかしたときの対応法(よくあるパターン別)
  • 最近新しく追加されたgitコマンド
  • Twitterでの質問返答(その他質問もOK)

Gitの基本的なコマンド

clone(ローカルのリポジトリを作成)

# リモートリポジトリをclone
$ git clone https://github.com/ユーザー名/リポジトリ名.git

# アカウントを指定してリモートリポジトリをclone
$ git clone https://{githubユーザー名}@github.com/ユーザー名/リポジトリ名.git

checkout(ブランチの移動、ブランチを作って移動)

# developブランチに移動
$ git checkout develop

# 今居るブランチから新しいブランチを作って移動
$ git checkout -b feature/new_branch

branch(現在のブランチを確認、ブランチ作成)

# 今居るブランチの確認
$ git branch

# リモート環境も含めてブランチを確認
$ git branch -a

# 今居るブランチから新しくブランチを作成(移動はしない)
$ git branch new_branch

add(変更したファイルをステージングに追加する)

# ファイルを指定してステージングに追加する
$ git add hoge.txt

# 対話型でステージングに追加
$ git add -i

# すべてのファイルをステージングに追加
$ git add .

commit(ステージングに追加したファイルをローカルリポジトリに追加する)

# メッセージ付きでファイルをコミット
$ git commit -m'コミットメッセージ'

push(コミット内容をリモートリポジトリに反映させる)

# originのfeature/test1ブランチに対して変更内容を追加
$ git push origin feature/test1

merge(他のブランチの内容を今いるブランチに取り込む)

# 今いるブランチにfeature/test1ブランチを取り込む
$ git merge feature/test1

reset(コミットの取り消し)

# 直前のコミットを取り消し
$ git reset HEAD^

revert(コミットの打ち消しコミット)
※取り扱い注意!!!!!

# commit_id 123456のコミットを打ち消し
$ git revert 123456

# commit_id 121212のマージコミットを打ち消し
$ git revert -m 1 121212

rebase(HEADの位置を変える、履歴の変更)
※取り扱い注意!!!!!

# 履歴を変更する(エディターが立ち上がって色々できる)
git rebase -i <commit_id>

やらかしたときの対応法

  1. developで作業しちゃってた(やらかし度:小)

    大丈夫だ、問題ない!
    落ち着いてまずは今いるdevelopブランチからfeatureブランチを切って移動してから作業を続けましょう

  2. developブランチで間違えてcommitしちゃった!(やらかし度:中)

    これもまだまだ全然セーフ、他の人には影響ありません(自分はテンパると思いますが・・・・・)
    先程のgit reset コマンドを使えばdevelopブランチへのcommitは取り消せます!
    その後にブランチを切って作業しましょう

  3. developブランチで間違えてpushしちゃった(やらかし度:大)

    ここで初めて他の人に影響が出てしまいます。
    まずはチームメンバーへやらかしてしまったことを報告しましょう:angel:
    その後は仕方ないですが、developブランチで作業することになります。。。。。
    git resetコマンドでpushの内容を取り消してからforce push するしか戻す術はありません
    作業が完了しても他の人がdevelopブランチを更新してしまっていてはpushされた情報が残ったままになってしまうので一度ローカルブランチを消去してもらい、再度取り直してもらいましょう

  4. mergeしたあとにcommitせずに作業を続けちゃってた(やらかし度:大)
    この場合はどの程度ファイルを変更したかによって難易度が変わってきます
    1~2ファイルで変更箇所がわかっているならそのファイルを一度どこかに対比させ、mergeからやり直すことをおすすめします。
    他のブランチの内容を取り込むだけのcommitなのに対して関係のないものを含めるとバージョンを管理する意味が皆無になってしまうのでそのまま作業を続けないように注意してください・・・・・

  5. developブランチで間違えてpushしちゃったあとに別のプルリクがmergeされちゃった(やらかし度:特大)

    やっちゃいましたね・・・・・・
    チームメンバーへの報告が遅れるとこのフェーズに入ってしまいます
    気づいたタイミングですぐに現状をチームメンバーに報告しましょう・・・・・・:sob:
    こうなってしまっては選択肢が限られていて

  • そのままdevelopブランチから修正のブランチを切って対応する
  • rebaseコマンドを利用して該当のコミットをなかったことにしてforce push

の2択になります。
しかしもしそこで不具合があるとすると、不具合を抱えたまま開発をすすめることになるのでrebaseコマンドで対応することをオススメします🐦

最近新しく追加されたgitコマンド

最近新しく2つのコマンドがgitに追加されたので紹介したいと思います!
どちらもgit checkoutの役割が大きかったので役割を分担するためのコマンドになっています。

  • git switch

    以前までブランチを移動する際はgit checkoutコマンドを利用していました。
    ですがcheckoutコマンドはブランチを作成する、移動するもセットで行えたので単純にブランチを移動するコマンドとしてgit switchコマンドが用意されたようです。

  • git restore
    知っている方もいるかも知れませんがgit checkoutコマンドで実はファイルを変更前の状態に戻すことができます。
    それもgit checkoutコマンドでやらなくてもいいんじゃないかということでコマンドが分けられたようです。

※いい記事がありました
https://qiita.com/yukibear/items/4f88a5c0e4b1801ee952

Twitterでの質問返答

Twitterで募集した知りたいことへの返答ありがとうございます!
質問にお答えしていきます!

  • revertについて

    revertなんですが、実は罠があります。。。。。
    一度revertでファイルの追加を無かったことにしてしまうとgit上ではいらないファイルとして認識されてしまい、revert後に同じ名前のファイルが追加できなくなります・・・・・・
    その場合、revertコミットを再revertすることでまたgit上でファイルを認識してくれるようになります

  • squashについて
    先程のgit rebaseコマンドを使うとコミットをまとめることができますよ!

  • チーム開発のgithubのブランチプルリク設定
    基本はgit flowで行うようにして、developブランチをデフォルトブランチに設定しておけばいいかと思います。
    その他にgithubにはプルリクテンプレートという機能がありMHTでも使用しています。

  • ローカルリポジトリからリモートリポジトリへの流れ
    今ここで実践してみます!

  • コマンドで操作できるようになりたい!
    コマンド周りでこれ詳しくというのがあれば!!

質疑応答

何かあれば!! 🐦

終わり

みんなも失敗しながらGitを使っていきましょう!
できることが増えるとみんなから重宝されるよ!(ただし、やらかし対応が多くなる)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Article information
RevisionsShow article in Markdown
Report article
Help us understand the problem. What are the problem?