Open17

Git

piyokopiyoko

初めて 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ブランチにアップすること指定しています。

piyokopiyoko

2回目以降、add と commit を一緒に行う

git commit -a -m "commit message"

push 前の git commit のメッセージを修正する

git commit --amend -m "修正後のコミットメッセージ"
piyokopiyoko

コミット履歴 表示

git log

1行で簡易にコミット履歴 表示

git log --oneline
piyokopiyoko

ワーキングエリア と ステージングエリア の差分表示

git diff

ステージングエリア と リポジトリの差分

git diff --staged
piyokopiyoko

Git log をツリー表示

git log --graph --oneline
piyokopiyoko

フォーク元の変更を取り込む

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
piyokopiyoko

git config の一覧を表示

ローカル

git config --local --list

グローバル

git config --global --list
piyokopiyoko

複数アカウントの切り替えとクローン

GitHub用のSSH鍵を生成する

  1. 既存のsshキーをバックアップ
// 移動
c:
cd c:\users\piyoko\.ssh

// キーファイルがあるか確認
dir

// キーファイルがあればディレクトリを丸ごとコピー
cd ../
xcopy .ssh .ssh_bk 
  1. 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
  1. 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
  1. GitHub公開鍵を登録
    Githubにログインして、[Settings] -> [SSH and GPG keys] -> [New SSH key] または [Add SSH key]で作成した公開鍵を登録。
    公開鍵は、作成してSSHキーファイルの拡張子.pubのほう
    キーのタイトルは、複数PCと繋げるならPCが分かるようにする

  2. 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
  1. フォークする
    GitHub のフォーム元の画面から右上のFork ボタンから 自リポジトリに Formする

  2. 自リポジトリから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

piyokopiyoko

プルリクのコミットをまとめる

コミットのログを確認

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
piyokopiyoko

ブランチ

ブランチ確認

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
piyokopiyoko

プルリクしたらコンフリクトしたので解消する

あってるかわからないけど解消した手順

  1. GitHubからフォーク元でプルリクをcloseしてしまう。
  2. フォーク元から最新取得
git fetch upstream
git merge upstream/main

この時点でコンフリクトがあれば
「Automatic merge failed; fix conflicts and then commit the result.」って出る。

  1. コンフリクト解消
    ■ マージを手作業で修正する場合
    VsCode を 開けて手作業で修正する
    https://backlog.com/ja/git-tutorial/pull-request/10/

■ 自分の手元を正としてコンフリクトを解決する場合

git checkout --ours .

■ リモート先を正としてコンフリクトを解決する場合

git checkout --theirs .

https://naokiotsu.com/2016-12-20-git-checkout-ours-theirs/

4. 跡はいつも通り add → commit → push → pullreq

piyokopiyoko

フォーク元からブランチ作成

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
piyokopiyoko

リモートのブランチを削除する

git push origin --delete リモートブランチ名
piyokopiyoko

フォーク元のプルリクエストのソースをローカルに持ってくる

フォーク元(upstream)のプルリク「#10」のheadを、たとえばローカルブランチのlocalreq10を持ってくるには

git fetch upstream pull/10/head:localreq10

あとはローカルブランチをチェックアウトして確認した後削除する。

piyokopiyoko

git 変更の取り消し ~add前~

特定のファイルの変更を取り消す

git checkout <ファイル名>

特定のディレクトリ以下の変更を再起的に取り消す

git checkout <ディレクトリ名>

全てを元に戻す

 git checkout .