目的
GitコマンドとUIツールを共存してうまく活用していく
前提
まずは、Gitをインストールしてきましょう
あって損しないもの(追記で入れましょう)
TortoiseGit
SourceTree
Github等で、gitリポジトリ作る
Windows に沿って説明します
コマンドプロンプト起動してhogeなディレクトリ作ってそこへ移動
↓
git init や git clone ... /.git
(または、ブラウザ上でフォークしてターミナルでクローンなど)
↓
初期化機能追加対応(ソース修正)
↓
git add file ...
↓
git status
↓
git commit -m "#issues5 初期化処理の機能追加しました"
↓
git push origin master
((フォークした)自身リポジトリにプッシュ)
git push upstream master
(フォーク前のリポジトリにプッシュ)
(チームでやってるときは本当にmasterにプッシュしても大丈夫か要確認!)
オプション(-f)をつけることにより、強制的にプッシュできる。
git pull
リモートにある最新を取得してマージ
git fetch
リモートにある最新を取得のみ
git pull origin master
(フォークしたリポジトリの最新を取得してマージ)
git pull upstream master
(フォーク前のリポジトリの最新を取得してマージ)
git fetch origin master
(フォークしたリポジトリの最新を取得)
git fetch upstream master
(フォーク前のリポジトリの最新を取得)
リポジトリのフォーク
GitHub等のアカウントを持っていると、自分のアカウント内に既存のリポジトリの複製をつくれたりします。 この操作をフォークと呼ばれる。
共有されていないリポジトリに対して書き込むことはできません。 一方、フォークしたリポジトリは自分の所有物なので、自由に更新ができます。
git merge
fetchした内容を自分のブランチへマージさせる
チェックアウト後の新規ファイルを追跡できずにステージングに残ってしまう場合の対処
untracked fileを削除するためにはgit cleanを使います。
git clean -n
untracked fileを削除する前に、削除の対象となるファイルを確認できます。
git clean -dn
ディレクトリを確認したい場合に使う
git clean -f
untracked fileを削除します。
git clean -df
ディレクトリを削除する場合はdをつけます。
コンフリクト起きてgit pullできない時
ひとことでまとめようとすると難しい
自分のソースをバックアップとることを前提に、
git fetch で状態だけ確認、コンフリクト起きたところをIDE等で見て修正。そして、git mergeでマージ
よい方法の例としては
TortoiseGitの場合、右クリックすると『変更取り消し』機能があるので、事前にバックアップはするのは前提とし、その機能を活用したあと、バックアップと差分確認し、自分の修正取り込んだり、修正を捨てる
TortoiseGit入れなてないときも同様に、バックアップ取ってプルまたは、クローンし直して、修正差分を取り込む。
差分確認ツールとして
WinMergeが有名である。または、gitの差分コマンドや、TortoiseGitの差分機能も検討してみてください
vscode拡張機能としてGit Lensがある
https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens
ブランチの状態を確認できるツール
Sourcetreeの代用として可能
vscode拡張機能としてGit Graphがある
https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph
結論
ひとことでいうと、コンフリクト起きたときは、自分のファイルをリネームしてプルし差分取り込む、またはローカルブランチ切るか、UI使ってバックアップを視覚化して分かりやすく取ることが大切
オプション
--ff-onlyを設定する
fast-forwardでマージできる状況ではfast-forwardでのmergeを、そうでなければfetchのみ行う
git pull --ff-only origin HEAD
--ff-onlyをデフォルトで実行されるようにする
git pull時に--ff-onlyを設定すると便利です。エンジニアたるもの良さそうなオプションは当然デフォルトで設定したくなる。
デフォルト設定にする場合~/.gitconfigを編集するか
~/.gitconfig
[pull]
ff = only
下記コマンドを実行する事で設定できます。
$ git config --global pull.ff only