仕事

【Git&Sourcetree】基礎的なコマンドと操作 チートシート

2022年10月7日


どうも、こんにちは。Sneakybot です。

【git clone】リモートリポジトリをクローン

Git


クローンしたいリモートリポジトリのURLをコピー。

 TERMINAL
git clone コピーしたURL

git clone urlコマンドを実行した後に、SourccetreeとGitHubを連携させるには以下を参考。

【git branch】ブランチを新規作成

Git

 TERMINAL
git branch 'nameofbranch'
#以下のコマンドで、ブランチの作成と切り替えを同時に行えます。
git checkout -b feature/◯◯
git checkout -b feature/test01 remotes/origin/develop

※mainブランチからブランチを切る場合は、先にmainブランチに移動。
※リモートのdevelopブランチを切って、ローカルにfeature/test01ブランチを作成できる。注意点はgit branch -aでremotes/origin/developブランチが一覧にあること。ない場合は、最後にpullした後にリモートにdevelopブランチが作成されたので、ブランチをgit branch 'nameofbranch'で作成した後に、そのブランチに移ってリモートのdevelopブランチをpullすればいい。

Sourcetree


1をクリックして2にブランチ名を記入。「ブランチを作成」をクリック。

Sourcetree


クローンしたいリモートリポジトリのURLをコピー。


コピーしたURLを1に張り付ける。2にローカルリポジトリのあるフォルダのパスを入力。

【git rm】ファイルを削除

 TERMINAL
git rm ファイル名
git rm -r ディレクトリ名

【git branch】ローカルブランチの一覧を表示

Git

 TERMINAL
git branch
#ローカルとリモートの全てのブランチを表示
git branch -a
#リモートブランチの一覧を表示
git branch -r

【git switch/checkout】ブランチの切り替え

Git

 TERMINAL
git switch 'new-feature'
git checkout 'new-feature'

new-featureへブランチを切り替える。checkoutとswitchは同じ。
git checkoutはブランチ切り替え以外にファイルの変更の取り消しもする。

Sourcetree


test02ブランチをダブルクリック。


OKをクリック。

【git status】修正したファイル以外がステージに入っていないことを確認

Git

 TERMINAL
git status

現在の変更状況を確認。
編集した箇所と直前のコミットの差分を確認できる。

【git diff】修正したファイル差分を確認

 TERMINAL
git diff

ワークツリーとステージを比較

【git add】ステージにファイルを追加

Git

 TERMINAL
git add <ファイル名>
#--allだと変更が加えられたファイルと、未追跡だったファイルだけをstaging areaにaddしてくれる。
git add -A
#上と同じ
git add --all
#git管理下のファイル全部だから--allを使おう
git add .

Sourcetree


「全てステージに追加」で「作業ツリーのファイル」のファイルを全てステージに追加。ファイル名の右側にあるプラスボタンをクリックして、「選択をステージに追加」ボタンをクリックで選択したファイルのみステージに追加。

【git add】 git addの取り消しはこちらです。

Git

 TERMINAL
git reset HEAD ファイル名

ステージに上げたファイルの編集を取り消す。

【git commit】ステージにあるファイルをコミット

Git

 TERMINAL
git commit -m 'comment'

-mオプションでコメントを記入。

Sourcetree


コメントを記入して1の「コミット」ボタンをクリック。2のボタンでもOK

【git pull】リモートリポジトリから変更をプル

Git

 TERMINAL
git pull origin main

リモートのmainブランチから今いるローカルのブランチに変更を取り込む。

Sourcetree


リモートリポジトリの変更は基本的Sourcetree上では確認できない。なので「フェッチ」ボタンをクリックして、リモートリポジトリの変更してる状態を知る。


「すべてのリモートからフェッチ」にチェックを入れて、OKをクリック。

【git push】ロカールのブランチをリモートへ登録

Git

 TERMINAL
git push -u origin feature/test01

今ローカルでいるブランチを新しくリモートに登録する。
-uオプションをつけると、次からは git push だけで上記のコマンドと同じことを実施できる。

【pull request】プルリクエスト


プルリクエストはGitHubやBackLogの機能。
プルリクエストのマージ後にブランチを削除。

【git branch -d】ローカルブランチを削除

Git

 TERMINAL
git branch -d 'nameofbranch'

-d オプションを指定してブランチを削除。
すでにpush済みのローカルブランチfeature/◯◯は不要。なので削除。

【git push origin --delete】リモートブランチを削除

Git

 TERMINAL
git push origin --delete 'nameofbranch'
以下でもOK
git push origin :nameofbranch
 TERMINAL
git push --delete origin feature/◯◯

【git restore index.html】ワークツリーの変更を削除

 TERMINAL
git restore ファイルパス

git add前のワークツリーの変更を取り消す。
ちなみに、git checkout -- index.htmlでもできる。

【git restore --staged index.html】git addを取り消す

 TERMINAL
git restore --stagedファイルパス

git addを取り消す。つまり、ステージの変更をワーキングツリーに戻す。

【git status】作業ツリーの状態を確認

Git

 TERMINAL
git status

作業ツリーにコミットされてないファイルがあるか確認できる。

【git fetch】

 TERMINAL
git status

【git branch -m】ブランチ名の変更

現在のローカルのソースコードが変わらない。
つまりマージはしない。

Git

 TERMINAL
git branch -m 'newnameofbranch'

-m オプションを使ってブランチ名を変える。

Sourcetree


エラー: Your local changes to the following files would be overwritten by checkout:

 TERMINAL
error: Your local changes to the following files would be overwritten by checkout:
test.app
Please, commit your changes or stash them before you can switch branches.

原因

原因は移りたいブランチにも同じファイルがあり、ブランチを切り替えると今いるブランチの変更したファイル(modified and staged/indexed files)に、移りたいブランチの同じファイルが上書きされちゃうから何とかしてと言われてる。つまりコンフリクト。

※「local changes」とは今いるブランチの変更されたファイル(modified and staged files and not untracked files)でgitに未追跡ファイル(untracked files)のことではない。

解決方法

上記のエラー対策は下記のどれか。

  • 変更を破棄する
  • 変更をコミットする
  • 変更を退避させる

変更を破棄する

 TERMINAL
git switch -f nameofbranch

「-f」のオプションで、作業ツリーの変更(今いるブランチのmodified and staged files)をすべて破棄して、強制的にブランチを切り替える。

【git stash】変更を退避させる

 TERMINAL
git stash save '一時退避'

saveコマンドの後ろにメッセージをつけてもOK。ちなみにgit stashのみでもOK。
ここでgit switchができるようになる。
ちなみに、元のブランチで新しく作成した未追跡ファイル(untracked files)は、他のブランチに切り替えた後でも消えないで見れる。逆に元のブランチで変更されたコミットされてないファイル(modified and staged files)は退避したので、見れない。

他のブランチでの作業が終わり、元のブランチに戻ったら下記のコマンドで退避させた内容を元に戻す。

つまり、退避した内容というのは、元のブランチで変更されたコミットされてないファイル(modified and staged files)。
もちろん、未追跡ファイル(untracked files)は保存もされないし、削除もされない。

 TERMINAL
git stash list
stash@{0}: WIP on feature/test01: xxxx
stash@{1}: WIP on feature/tetst02: xxxx
git stash apply 'stash@{0}'

git stash apply 'stash@{0}' ←が戻したい変更
git stash applyのみだと一番最後に退避したファイルを元に戻す。返してもらうイメージ。

【git reset】コミットを取り消す

下記シナリオ

  1. CSV出力機能実装完了
  2. git add .
  3. git commit -m ''
  4. あ、間違え発見

この状態でしたいことは、コミットを取り消して、2(git add .した直後の状態)まで戻してから修正して再度git add、git commitする。

 TERMINAL
$ git reset --soft HEAD^

下記結果

ここで、何らかの間違えに気づく。

上記のコマンドでコミットする直前、つまりgit add .した直後まで戻れる。
オプションは下記

  • --hardはgit commit -m 'init commit'した直後まで戻す。つまり全ての変更がなくなるので注意。
  • --mixedはgit add .直前、ワーキングツリーでのCSV出力機能を残す。
  • --softはgit add .直後、つまりgit commit -m 'CSV出力機能追加'した直後まで戻す。


間違えを修正し、再度git add .とgit commit -m 'CSV出力機能追加'
git pullしてgit pushする。

問題解決。

もっと前のコミットに戻りたい

 TERMINAL
$ git log
commit ハッシュ値
$ git reset --mixed ハッシュ値

-仕事