Git
初めて git push の際に指定する「-u(--set-upstream) 」の意味
git push -u(--set-upstream) origin main
-u(--set-upstream) の意味は
upstream branchがないのでgit push --set-upstream でセットしてくださいというものです。
つまり
ソースをpushするブランチがセットされていないので、-u(--set-upstream) で origin(=リモートリポジトリ)のmainブランチにアップすること指定しています。
2回目以降、add と commit を一緒に行う
git commit -a -m "commit message"
push 前の git commit のメッセージを修正する
git commit --amend -m "修正後のコミットメッセージ"
コミット履歴 表示
git log
1行で簡易にコミット履歴 表示
git log --oneline
ワーキングエリア と ステージングエリア の差分表示
git diff
ステージングエリア と リポジトリの差分
git diff --staged
直前のコミットを取り消す
windowsの場合はダブルクォートで囲む
git reset --soft "HEAD^"
Git log をツリー表示
git log --graph --oneline
フォーク元の変更を取り込む
upstream が登録されているか確認する
git remote -v
upstream先が登録されていなければ登録する
git remote add upstream git@github.com:xxx[repositoryname]xxx/xx[projname]xxx.git
// 複数アカウント切替している場合は [git@github.com]の部分をconfigで設定した値に変更する
git remote add upstream git@github-office:xxx[repositoryname]xxx/xx[projname]xxx.git
upstreamが既に登録されていて変更したければ、upstream を削除する
git remote rm upstream
upstream先の最新を自分のリポジトリにマージ
git fetch upstream
git merge upstream/main
// fetch + merge いっぺんに pull してもいい
git pull upstream
git pull origin main
git config の一覧を表示
ローカル
git config --local --list
グローバル
git config --global --list
複数アカウントの切り替えとクローン
GitHub用のSSH鍵を生成する
- 既存のsshキーをバックアップ
// 移動
c:
cd c:\users\piyoko\.ssh
// キーファイルがあるか確認
dir
// キーファイルがあればディレクトリを丸ごとコピー
cd ../
xcopy .ssh .ssh_bk
- SSH鍵を生成
// 移動
c:
cd c:\users\piyoko\.ssh
// 会社用 SSH鍵を生成
ssh-keygen -t ed25519 -C "piyoko.office@gamil.com" -f "id_rsa_github_office"
パスフレーズは未入力でOK
// 個人用 SSH鍵を生成
ssh-keygen -t ed25519 -C "piyoko@gamil.com" -f "id_rsa_github_private"
パスフレーズは未入力でOK
// 確認
dir
- sshの鍵の設定ファイルを作成
c:\users\piyoko.ssh\config
#------------------------------------
# 仕事(office)
#------------------------------------
Host github-office
HostName github.com
User git
Port 22
HostName github.com
IdentityFile ~/.ssh/id_rsa_github_office
TCPKeepAlive yes
IdentitiesOnly yes
#------------------------------------
# プライベート
#------------------------------------
Host github-private
HostName github.com
User git
Port 22
HostName github.com
IdentityFile ~/.ssh/id_rsa_github_private
TCPKeepAlive yes
IdentitiesOnly yes
-
GitHub公開鍵を登録
Githubにログインして、[Settings] -> [SSH and GPG keys] -> [New SSH key] または [Add SSH key]で作成した公開鍵を登録。
公開鍵は、作成してSSHキーファイルの拡張子.pubのほう
キーのタイトルは、複数PCと繋げるならPCが分かるようにする -
ssh 接続確認
ssh -T git@github-office
ssh -T git@github-private
// 以下が表示されればOK
// Hi piyoko! You've successfully authenticated, but GitHub does not provide shell access.
こんなワーニングがでたらNG
// Warning: Permanently added the ED25519 host key for IP address '13.114.40.48' to the list of known hosts.
ssh-keygen -R 13.114.40.48
-
フォークする
GitHub のフォーム元の画面から右上のFork ボタンから 自リポジトリに Formする -
自リポジトリからClone する
// [git@github.com]の部分をconfigで設定した値に変更する
// 会社の場合
e:
cd E:\office\projectname
git clone git@github-office:piyoko/projectname.git
// 個人の場合
git clone git@github-private:piyoko/projectname.git


この2工程をまとめてやってくれるのがpull

プルリクのコミットをまとめる
コミットのログを確認
git log
git rebase --interactive まとめたいコミットの一つ前のコミットIDを指定
git-rebse-todoが VsCode で開く

ファイルを変更して閉じる

ファイルを終了すると次に
COMMIT_EDITMSG が VsCode で開くので、一番上部に新しいコミットメッセージを記載してファイルを終了する

ファイルを終了すると、ターミナルに Successfully と表示される
Successfully rebased and updated refs/heads/main.
既にリポジトリにプッシュしている為、リポジトリにForceプッシュする
git push -u origin main --force
ログを確認
git log
ブランチ
ブランチ確認
git branch
ブランチの一覧を見る
git branch -a
ブランチ作成
git branch ブランチ名 基にするリモートブランチ
git branch dev origin/mastter
ブランチ作成
ブランチ名を省略すると、現在のカレントブランチを元にして新しいブランチが作成される
git branch ブランチ名
不要なブランチ削除
git branch -D ブランチ名
作業ブランチ変更
git checkout ブランチ名
全部まとめて
mainブランチから新しくdevelopブランチを作って、developブランチを作業ブランチにする
git checkout -b develop main
プルリクしたらコンフリクトしたので解消する
あってるかわからないけど解消した手順
- GitHubからフォーク元でプルリクをcloseしてしまう。
- フォーク元から最新取得
git fetch upstream
git merge upstream/main
この時点でコンフリクトがあれば
「Automatic merge failed; fix conflicts and then commit the result.」って出る。
- コンフリクト解消
■ マージを手作業で修正する場合
VsCode を 開けて手作業で修正する
https://backlog.com/ja/git-tutorial/pull-request/10/
■ 自分の手元を正としてコンフリクトを解決する場合
git checkout --ours .
■ リモート先を正としてコンフリクトを解決する場合
git checkout --theirs .
4. 跡はいつも通り add → commit → push → pullreq
フォーク元からブランチ作成
upstreamから取得
※ upstream が登録されていなければ登録しておく。
※ 参照:フォーク元の変更を取り込む
git fetch upstream
ローカルに dev ブランチ を作成し
upstream の main ブランチ を ローカル dev ブランチにマージ
dev ブランチをチェックアウトする。
git checkout -b dev upstream/main
リモートにpushする際、初回1回目は git push origin すると
リモートにdevブランチが作られる
git push origin
スカッシュマージ
devブランチで粒度細かくコミットする
mainブランチに切り替えて、devブランチの内容をマージする
スカッシュマージするとdevの細かなコミットは一つになってmainブランチにマージされる
git merge --squash dev
そのあとcommitする
マージの代わりにリベースする
リモートの内容を取得
git fetch origin
リベース
リモートのdevelopブランチの内容を、ロカールのdevelopブランチに合流させる
コミット履歴が直線になる
git rebase origin/develop develop
フォースオプションでプッシュする
-f:リモートを無視してローカルを正として強引にプッシュする
git push origin -f
最終コミット時点に戻す
git reset --hard "HEAD^"
コミットしない内容を一旦消す
git stash
一旦消した内容をもとに戻す
git stash pop
リモートのブランチを削除する
git push origin --delete リモートブランチ名
フォーク元のプルリクエストのソースをローカルに持ってくる
フォーク元(upstream)のプルリク「#10」のheadを、たとえばローカルブランチのlocalreq10を持ってくるには
git fetch upstream pull/10/head:localreq10
あとはローカルブランチをチェックアウトして確認した後削除する。
git 変更の取り消し ~add前~
特定のファイルの変更を取り消す
git checkout <ファイル名>
特定のディレクトリ以下の変更を再起的に取り消す
git checkout <ディレクトリ名>
全てを元に戻す
git checkout .