メモ > 技術 > 開発: Git > Sourcetreeでgitを操作する(応用)
Sourcetreeでgitを操作する(応用)
Sourcetreeを例に、特別な操作の実例を記載
■過去のコミットに戻る
戻りたいコミットをダブルクリックする
「作業コピー切り替えの確認」が表示されるので「OK」をクリックする(過去の状態に戻る)
■過去のコミットから作業を続ける
「過去のコミットに戻る」の操作で過去の状態に戻る
その状態でツールバーの「ブランチ」をクリックし、作業ブランチを作成する
作業を行いコミットする
■過去のコミットを無かったことにする(プッシュしていない場合のみ有効)
戻りたいコミットを右クリックし、「現在のブランチをこのコミットまでリセット」をクリックする
モードは以下のとおり
Soft ... 変更したファイルはIndexにステージされた状態でコミットがリセットされる
Mixied ... 変更したファイルはIndexにステージされない状態でコミットがリセットされる
Hard ... 作業が完全に無かった状態でコミットがリセットされる
■過去のコミットを打ち消す(プッシュしている場合、過去のコミットと反対の内容のコミットを作成する)
打ち消したいコミットを右クリックし、「このコミットを打ち消し」をクリックする
確認が表示されるので「Yes」をクリックする
■masterにマージしてプッシュした内容を無かったことにする(推奨手順)
masterブランチの名前を master_20180721 などに変更する
master_20180721 ブランチの戻りたいコミットをダブルクリックする
その状態でツールバーの「ブランチ」をクリックし、masterブランチを作成する
以下のコマンドでmasterブランチを強制的にプッシュする
git push -f origin HEAD:master
■masterにマージしてプッシュした内容を無かったことにする(非推奨手順)
※作業が別ブランチにバックアップされず、完全に削除される
特別な理由が無ければ「masterにマージしてプッシュした内容を無かったことにする(推奨手順)」の手順を推奨
「過去のコミットを無かったことにする」の手順で、Hardでリセットする
以下のコマンドで強制的にプッシュする
git push -f origin HEAD:master
■masterにマージしてプッシュした内容を無かったことにした内容を他の環境に取り込む
masterブランチの名前を master_20180721 などに変更する
「リモート」にあるmasterブランチにチェックアウトする
もしくは以下のコマンドで、サーバ上の状態と強制的に一致させる
git reset --hard origin/master
■直近のコミットメッセージを修正する
コミット画面を開く
「オプションのコミット」を「最後のコミットを上書き」を選択する
確認が表示されるので「OK」をクリックする
■未コミットのファイルを作業を一時退避する
ツールバーから「スタッシュ」を選択する
任意の名前を付けて「OK」をクリックすると、サイドバーの「スタッシュ」に変更内容が格納される
元に戻したいときは、スタッシュを右クリックして「適用」を行う
新規のファイルはスタッシュの対象外になる
対象に含めたい場合、コマンドラインでは「-u」オプションを付ける
Sourcetreeの場合、いったんIndexにステージした状態でスタッシュを実行する
git stash で、作業中の変更をいったん横に退けておく | Tips Note by TAM
https://www.tam-tam.co.jp/tipsnote/program/post10600.html
■未コミットのファイルを作業を一時退避する(コマンド)
以下のコマンドでスタッシュを実行できる
$ git stash
以下のようにすれば、スタッシュの内容を確認できる
$ git stash list
$ git stash show 0 … 番号を指定して内容を確認
$ git stash show 0 -p … 差分を確認
以下のようにすれば、スタッシュの内容を適用できる
$ git stash apply 0
【Git】stashコマンドのまとめと使い方 〜変更差分の一時退避〜 #初心者 - Qiita
https://qiita.com/nakaji0210/items/330f6dcb361da074c2c0
■別のブランチから特定時点のコミットを取り込みたい
作業ブランチでコミットA, B, C と進めた場合、通常はコミットCまで進めたものを大元のブランチにマージする
が、コミットAやBの時点のものをマージできるか
ブランチを右クリックしてマージ…ではなく、任意のコミットを右クリックしてマージすることで対応できる
■別のブランチから特定のコミットを取り込みたい
コミットを積み重ねたいブランチにチェックアウトしておく
取り込みたいコミットを右クリックし、「チェリーピック」をクリックする
確認が表示されるので「Yes」をクリックすると、即座にコミットが実行される
■コミットに目印を付ける
タグを設定したいコミットを右クリックし、「タグ」をクリックする
任意の名前を付けて「タグを追加」をクリックすると、サイドバーの「タグ」にタグが表示される
タグをクリックすると、その時点のコミットが表示される
「すべてのタグをプッシュ」にチェックを入れた状態でプッシュすると、リモートのリポジトリにもタグが反映される
GitHubの場合、各画面でブランチを選択する際にタグが表示される
「release」から、その時点の圧縮ファイルをダウンロードすることもできる
Bitbucketの場合、各画面でブランチを選択する際にタグが表示される
「ダウンロード」から、その時点の圧縮ファイルをダウンロードすることもできる
■グローバル無視リスト
※以下の手順で反映できると思われるが、反映されなかった
すでにGit管理されているファイルだからか
C:\Users\xxx\.gitignore_global
を作成して以下のように無視したいファイルを記述
app/Plugin/VeriTrans4G/Resource/tgMdkPHP/tgMdk/3GPSMDK.properties
app/Plugin/VeriTrans4G/Resource/tgMdkPHP/tgMdk/log4php.properties
Sourcetreeでツールバーから「オプション → Git → グローバル無視リスト」で上記ファイルを選択
「OK」をクリック
■改行コードの対応
Windows環境のSourcetreeで普通にCLONEすると、改行コードはWindows用のものに変換される
ただしDocker環境でComposerを使う場合など、Linuxの改行コードのままでないと正しく処理できないことがある
以下を参考に、Linuxの改行コードでファイルを扱う方法を記載する
Git for Windowsでautocrlfの設定を間違えちゃった時の対応 - Qiita
https://qiita.com/e_tyubo/items/ac555ab9d278ac366679
WindowsでGitを使うときは改行コードの自動変換を無効にしてほしい | アズシエルブログ
https://www.azciel.co.jp/blog/2018/08/24/windows-git-autocrlf/
Homestead環境でPHPUnitを実行しようとすると、`/usr/bin/env: ‘sh\r’: No such file or directory`というエラーが出た - Qiita
https://qiita.com/taro-hida/items/057ebc4ecb27ba376162
Gitの設定は、リポジトリ固有の設定があればその内容が、無ければグローバル設定が、それも無ければシステム設定が使用される
システム設定
C:/Users/Refirio/AppData/Local/Atlassian/SourceTree/git_local/etc/gitconfig
グローバル設定
C:/Users/Refirio/.gitconfig
リポジトリ設定(リポジトリが C:\Users\Refirio\Docker\test の場合)
C:\Users\Refirio\Docker\test\html\.git\config
以下のようにすると、現状の改行コード設定と、どこのファイルで設定されているかを確認できる
(「core.autocrlf」が改行コード変換の設定)
$ git config --show-origin core.autocrlf
file:C:/Users/Refirio/AppData/Local/Atlassian/SourceTree/git_local/etc/gitconfig true
上記の gitconfig ファイルを確認すると、以下のようになっている
[core]
symlinks = false
autocrlf = true
fscache = true
確かに true となっている
グローバル設定が存在する場合、以下のように表示される
$ git config --show-origin core.autocrlf
file:C:/Users/Refirio/.gitconfig true
リポジトリ固有の設定がある場合、以下のように表示される
$ git config --show-origin core.autocrlf
file:.git/config false
以下のようにすると、設定を変更できる
$ git config --show-origin core.autocrlf
file:C:/Users/Refirio/.gitconfig true
$ git config --global core.autocrlf false
$ git config --show-origin core.autocrlf
file:C:/Users/Refirio/.gitconfig false
false に変わることが確認できる。このとき、
C:\Users\Refirio\.gitconfig
のファイルも書き換わっている
また、以下などのファイルを直接編集して設定を変更することもできる
C:\Users\Refirio\Docker\test\html\.git\config
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
autocrlf = false … 追加
以下で確認
$ git config --show-origin core.autocrlf
file:.git/config false
ファイルによる指定となり、false になったことが確認できた
ただし、これだと初回CLONEのときに反映されないことになる
一例だが、以下の手順で対応してみる
C:\Users\Refirio\.gitconfig
で以下のように変更(改行コードを自動変換しない)
[core]
excludesfile =
autocrlf = false
以下で確認
$ git config --show-origin core.autocrlf
file:C:/Users/Refirio/.gitconfig false
この false の状態でCLONEする
つまり、Linuxの改行コードでファイルが配置される
CLONEが完了したら、いったん設定を確認する
$ cd /c/Users/Refirio/Docker/test/html
$ git config --show-origin core.autocrlf
確認できたら、
C:\Users\Refirio\.gitconfig
の autocrlf 設定はもとに戻して
C:\Users\Refirio\Docker\test\html\.git\config
に autocrlf 設定を追加する
これで、特定リポジトリでのみ改行コードの自動変換を無効にできる
もちろん、すべてのプロジェクトで常に改行コードの自動変換を無効にするなら、大元の設定で自動変換を無効にしておくだけでいい
■複数のアカウントで操作する
GitHubとBitbucketのアカウントを同時に使うのは問題ないが、
GitHubのアカウントAとGitHubのアカウントBを使い分けようと思うと一筋縄ではいかないので注意
以下は未検証だが、参考になりそうなメモ
sourcetreeで複数のgitアカウント管理 - Qiita
https://qiita.com/A-Kira/items/0f5334919e330a95f198
GitHubを複数のアカウントで利用するためのメモ - Qiita
https://qiita.com/BlueEventHorizon/items/f9d81e3659ebce9e1ffc
GitHub+SourceTreeで複数アカウント設定 - myMemoBlog by 256hax
https://blog.tanebox.com/archives/6/
■その他
SourceTreeの使い方 - 初心者が習得すべき基本操作(diff, stash, tag, revert, cherry-pick) - ICS MEDIA
https://ics.media/entry/1365/
以下について解説されている
1. diff - 差分を見る
2. stash - 一時的に作業状態を保管しておく
3. tag - コミットにタグをつける
4. cherry-pick - 別ブランチのコミットを取得する
5. revert - コミットした内容を打ち消すコミットを作成する