0
1

More than 3 years have passed since last update.

git演習 これだけできればそこそこいけると思う!

Last updated at Posted at 2021-05-29

はじめに

復習がてら殴り書きしました。
最後の方までできれば指摘くらっても自分で修正していけるかと!

実践

gitの始め方

名前とアドレス登録

$ git config --global user.name "ユーザー名"
$ git config --global user.email メールアドレス

リモートリポジトリとローカルリポジトリ紐づけ

主に2通り。

  1. githubに作られているリモートリポジトリをクローン
    もうすでにリモート上にファイルがある場合はクローンでとりこも
$ git clone URL

2. ローカルリポジトリとリモートリポジトリを紐づける。
  ローカルのファイルから始めていく場合

#ローカルのフォルダ内にgitファイル生成
$ git init
#ローカルリポジトリとリモートリポジトリ紐づけ
$ git remote add origin URL

これでとりあえずローカルリポジトリとリモートリポジトリが繋がった状態。

一番最初にファイルを作ったらmasterでcommitしよ

gitファイルだけ作って真っ新な状態でブランチを切ろうとすると

fatal: Not a valid object name: 'master'.

というエラーになる。
幹がないと枝はなりませんわな。
なので、ファイルを作ってまずはmasterでcommitしよ!

基本的な流れ

  • ワークツリー
    編集したファイルをgitが検知してくれ自動的に編集したファイルだけを保管してくれてるところ

↓↓↓ add

  • インデックス
    addしてワークツリーの中からコミットしたいファイルが入るところ
    タスクごとにコミットしたいので、コミットしたいファイルだけaddするように。

↓↓↓ commit

  • リポジトリ

git add

インデックスに追加

$ git add . //編集した全てのファイルの場合
$ git add ファイル名

git status

現在の状態を表示

$ git status

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test.rb      #addしたファイル(インデックス)

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test1.rb          #編集中のファイル(ワークツリー)

git reset

インデックスに入れたファイルをワークツリーに戻す

$ git reset #インデックス内のファイルを全部ワークツリーへ戻す(addのときみたいに.はいらない)
$ git reset ファイル名

git commit

#vim出てくるやつ
$ git commit
#メッセージ付き
$ git commit -m "メッセージ"

コミットしたログを見る

$ git log
#これハッシュ値も短くなる
$ git log --oneline

ブランチ

#ブランチ一覧
$ git branch
#ブランチ作成
$ git branch test_branch
# ブランチ作成 + 切り替え
$ git switch -c ブランチ名
#ブランチ名変更
$ git branch -m 古いブランチ名 新しいブランチ名
#ブランチ削除
$ git branch -d ブランチ名

git push

ローカルリポジトリでコミットした内容をリモートリポジトリに送信。

$ git push origin HEAD

ローカルリポジトリを最新にする。

#fetch + marge = pull
$ git pull origin HEAD
#コミット情報だけ最新
$ git fetch
#ファイル上書き
$ git merge origin/master

pullしたあとにmargeだけリセットする

$ git merge --abort

やっちまった

直前のコミットを修正する

$ git commit --amend
#メッセージの修正だけならこれでいいし、
#ファイル修正したらaddしてからしたらその編集も乗る。

すでにpushしたコミットを修正してもっかいpushしたい

そのままpushしてもリモートリポジトリとローカルリポジトリが違うからエラーになる。forceオプションを使って強制的にpushする。(結構危険)

$ git push -f origin HEAD

commitをリセット

#編集したファイルはそのままでaddする前(ワークツリー)に戻す
$ git reset --mixed HEAD^
#編集したファイルはそのままでaddした後(インデックス)に戻す
$ git reset --soft HEAD^
#編集したファイルを編集前に戻す(なかったことにする)
#新規にファイル作ってた場合はファイルがなくなる
$ git reset --hard HEAD^
#ハッシュ値指定
$ git reset --soft 7a7b8a0f6f73c2951278c02eb20d820cbb1621e2~
#git log --onelineの短いハッシュ値の方でも使える!

HEAD^HEAD~1は直前

HEAD~2は直前の一つ前

ハッシュ値を指定したい場合はハッシュ値~最後の波線忘れないこと。

ただし2つ目とか3つ目のやつを指定するとそれより新しいコミットは全部リセットされる。

cherry-pick

他のブランチにコミットをコピーする。

$ git switch -c ブランチ名
$ git cherry-pick コミットハッシュ値

ローカルリポジトリにコミット情報がないコミットはコピーできないので、git fetchを使って最新のコミット情報をリモートリポジトリからとってきてからコピーする。

ローカルで自分が作ったブランチでコミットしたのを別ブランチ作ってcherry-pickしようとしたとき最初に作ったブランチと競合してしまうのでgit commit --allow-emptyしろって出てくる。

意味わからんってなったときは、git cherry-pick --quitをすればcherry-pickは一旦とまる。

rebase

#git log --onelineの短いハッシュ値も使えるよ
$ git rebase -i コミットハッシュ値

指定したコミットより新しいコミットを編集するようになる。

481bad777ee0f9a0132e19eb61c42f1bd04d5707

34af8ad7b887eb96274c9e97f727e3e0e39bf391 ↑ここから上が修正対象

d535f26c5fecb718a3448b9eaeba232933e2b121 ←これをrebaseしたら
#これなら3つとも編集できるよ!
$ git rebase -i HEAD~3

image.png
なんかVScodeで直感的にできるようになっとる;
vimのときと並び方が逆やな。。。

1 pick 34af8ad create test7.rb
2 pick 481bad7 create test8.rb

vimではこんな感じで表示されるはず。

pick

何も編集しない状態。

pという風に省略可。

fixup

f

一つ古いコミットと統合する。

古い方のコミットメッセージが適用される。

squash

s

fixupと同じように統合される。

両方のコミットメッセージ参照され、vimでコミットメッセージの修正画面が表示される。

drop

d
コミットを削除する。
一時的に作成したりcherry-pickしたコミットを削除したりする。

コミットの順序入れ替え

VScodeなら直感的にドラッグで入れ替えればできてしまう。
vimの場合はコピペして入れ替えるだけ。
```
1 pick 34af8ad create test7.rb
2 pick 481bad7 create test8.rb

1 pick 481bad7 create test8.rb
2 pick 34af8ad create test7.rb
```
vimの操作は、ddで行切り取り、pでペースト

reword

r
コミットメッセージ編集

まとめ

インプット → 実践 → qiitaや自分用のmarkdownメモにまとめる。
この学習方法がぼくの中では最強なので、学習フェーズは急がず焦らず。
学習をやっつけ仕事にするのはヤバいので。。。
gitの一番の学習方法は自分でどうしようもなくぶっ壊して自分で元に戻すです。

0
1
0

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
0
1