Git
addを取り消し
これだけだと add の状態しか取り消されない. 変更も取り消すならローカルの変更も取り消す.
Bitbucketでのブランチのリベース
dev
ブランチにmain
ブランチの変更をリベースの形で導入したいとする. dev
ブランチをチェックアウトする - 左メニューの
main
ブランチを右クリックする Rebase current changes onto main
を選択する - cf. 失敗したら項目「リベースを巻き戻す」を参考にリベースを巻き戻せばよい
git reflog
からgit reset HEAD@{n} --hard
を使う
cleanでの削除内容の確認
diffツールの指定
- URL
- 例えばVSCodeを指定するには
${HOME}/.gitconfig
に次の通りに指定すればよい.
| [diff]
tool = default-difftool
[difftool "default-difftool"]
cmd = code --wait --diff $LOCAL $REMOTE
|
commitを取り消し
| git reset [<mode>] [<commit>] .
|
mode
のデフォルトは --mixed
. 変更したファイルも含めてすべて指定のコミット状態に戻したいときは --hard
を指定する.
git archiveでコミット間差分のファイルをディレクトリ構造つきで取り出す
結論: git archive をよしなに使う
結論から言えば SourceTreeの使い方 | コミット間の差分ファイルの抽出 (カスタム操作を使う方法)の記述通りにやればいい. この記事では特に SourceTree を使っている. Linux だと直接的には使えないけれども, Linux を使っているくらいの強い人なら直接 git patch で対応するだろうから対象外とする. そもそも本質的には git archive を使う話でしかなく, 下記の Mac 版のスクリプト (にあるコマンド) を使えばいい.
時々ウェブ上で昔の, 特にお気に入りの記事が消えて悲しい思いをすることも多いので, 必要な範囲で転記する.
バッチファイル作成
Windows では次の通り.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | if "%2" EQU "" (
set PARAM1=HEAD
set PARAM2=%1
) else (
set PARAM1=%1
set PARAM2=%2
)
setlocal enabledelayedexpansion
set RET_DIR=
for /F "usebackq" %%i in (`git diff --name-only %PARAM1% %PARAM2%`) do (
set RET_DIR=!RET_DIR! "%%i"
)
git archive --format=zip --prefix=archive/ %PARAM1% %RET_DIR% -o archive.zip
|
私個人としてはもう Mac は使っていないが, コマンドとして見やすいので置いておく.
| #!/bin/sh
if [ "$2" = "" ]; then
git archive --format=zip --prefix=archive/ HEAD `git diff --name-only HEAD $1` -o archive.zip
else
git archive --format=zip --prefix=archive/ $1 `git diff --name-only $1 $2` -o archive.zip
fi
|
これを直接実行すれば Linux でも手法そのものは使える.
バッチファイルをカスタム操作として SourceTree へ登録
- Win: メニューから「ツール」→「オプション」→「カスタム操作」タブ→「追加」ボタンをクリック
- Mac: メニューから「SourceTree」→「環境設定」→「カスタムアクション」タブ→「追加」ボタンをクリック
「カスタム操作を編集」ウィンドウでの設定
- メニュー表示名: 適当に設定 (ここでは「差分書き出し」とする)
- 実行するスクリプト: 先程作ったスクリプトを指定
- パラメーター:
$SHA
を設定
実行
- 2 つコミットを選ぶ
- 右クリックする
- 「カスタム操作」から「差分書き出し」をクリック
- リポジトリのトップディレクトリから zip を取ってくる
GitBucketでSSHが使えない:ssh-dss
- MSYS2 で動かないとき:http://blog.tizen.moe/entry/2015/09/23/000000
- https://qiita.com/komacchi/items/88fb3d501b1a6d2db301
- .netrc を使うか store (git config --global credential.helper store) を使うか。
- オフィスの GitBucket+http では .netrc を使ってみた。
+BEGIN_EXAMPLE
machine repo.example.co.jp login username password mypassword
+END_EXAMPLE
GitHub Actionsにタスク登録
- 参考など
- リポジトリ直下に
.github/workflows/deploy.yml
を作る - いろいろなサンプルをもとに適切に設定を書く
GitHub Actionsで環境変数を設定する
Settings
タブのSecurity > Secrets
から設定する
GitHub ActionsでX serverにrsyncでリリースする
| ssh-keygen -f ~/.ssh/id_rsa_xserv_no_pass -t rsa -N ""
|
- X serverのサーバーパネルから公開鍵を登録する
- あとは上記資料, 特に前者に沿って設定する
GitHubでフォークしたリポジトリを本家に追従させる
git remote add upstream git://github.com/some-author/some-repo.git
git branch -a
でupsteram
があるか確認 git fetch upstream
git checkout main
git merge upstream/main
GitHubで.env(の情報)を使いたい
- 参考
GitHub
のリポジトリのSettings
タブに移動する - 左メニューの
Security > Secrets
を開く - 環境変数を設定する
- プロジェクトの
.github/workflows/main.yml
に次のようにenv
を追記する
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | name: Node.js NX CI
on:
push:
branches:
- master
pull_request:
branches:
- master
env:
NEXT_PUBLIC_APP_ID: ${{secrets.NEXT_PUBLIC_APP_ID}}
NEXT_PUBLIC_AUTH_DOMAIN: ${{secrets.NEXT_PUBLIC_AUTH_DOMAIN}}
NEXT_PUBLIC_FIREBASE_API_KEY: ${{secrets.NEXT_PUBLIC_FIREBASE_API_KEY}}
NEXT_PUBLIC_MEASUREMENT_ID: ${{secrets.NEXT_PUBLIC_MEASUREMENT_ID}}
NEXT_PUBLIC_MESSAGING_SENDER_ID: ${{secrets.NEXT_PUBLIC_MESSAGING_SENDER_ID}}
NEXT_PUBLIC_PROJECT_ID: ${{secrets.NEXT_PUBLIC_PROJECT_ID}}
NEXT_PUBLIC_STORAGE_BUCKET: ${{secrets.NEXT_PUBLIC_STORAGE_BUCKET}}
jobs:
some-data
|
GitHubのトークン認証
- Settingsを開く
- 左メニューの
Developer settings
をクリック - 左サイドバーから
Personal access tokens
をクリック - 適当に認可を与える
- 生成されたトークンをコピー
- Ideaを開く
Preferences
を開く Version Control > GitHub
を開く +
アイコンからアカウント・トークンを指定する
ignoreされたファイルの確認
pullするリモートのデフォルトブランチを変える
| git push -u remote master
|
Sourcetreeでforce push
- URL
Preference
の言語選択で英語にする - 再起動して英語化を確認する
Preference
の右のAdvanced
を確認する force push
の設定をつける push
のモーダルでforce push
にチェックする
Sourcetreeで外部diffツールにvscodeを指定する
- URL
- 設定で外部diffツールに
/usr/local/bin/code --wait --diff $LOCAL $REMOTE
を指定する /usr/local/bin/code
は適切なパスを指定する
エイリアスの指定
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | git config --global alias.st status
git config --global alias.stt status -uno
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.df diff
git config --global alias.dff "diff --word-diff --ignore-all-space"
git config --global alias.gr grep
git config --global alias.l "log --decorate --oneline"
git config --global alias.ls "log --decorate --oneline --stat"
git config --global alias.lg "log --decorate --oneline --graph"
git config --global alias.unstage "reset HEAD --"
git config --global alias.cancel "reset --soft HEAD^"
git config --global alias.graph "log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'"
|
エイリアス設定確認
| git config --global --list | grep ^alias\.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
git config --global --list | grep ^alias\.
alias.co=checkout
alias.st=status
alias.br=branch
alias.cm=commit
alias.df=diff
alias.gr=grep
alias.stt=status
alias.dff=diff --word-diff --ignore-all-space
Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'
alias.l=log --decorate --oneline
alias.ls=log --decorate --oneline --stat
alias.lg=log --decorate --oneline --graph
alias.unstage=reset HEAD --
alias.cancel=reset --soft HEAD^
|
過去コミットに戻す
過去コミットのAuthorとCommitterを一括変更する
| git filter-branch -f --env-filter "GIT_AUTHOR_NAME='{{USERNAME}}'; GIT_AUTHOR_EMAIL='{{sample@example.com}}'; GIT_COMMITTER_NAME='{{USERNAME}}'; GIT_COMMITTER_EMAIL='{{sample@example.com}}';" HEAD
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='phasetr'; GIT_AUTHOR_EMAIL='phasetr@gmail.com'; GIT_COMMITTER_NAME='phasetr'; GIT_COMMITTER_EMAIL='phasetr@gmail.com';" HEAD
|
空コミットを作る
| git commit --allow-empty -m "Init"
|
設定確認
| git config --global --list
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | git config --global --list
push.default=simple
user.name=y.sekine
user.email=sekine@suri.co.jp
commit.template=c:\Users\y.sekine\.gitmessage
http.sslverify=false
core.excludesfile=C:\Users\y.sekine\.gitignore_global
core.autocrlf=false
core.quotepath=false
LOCAL" "$REMOTE"
alias.co=checkout
alias.st=status
alias.br=branch
alias.cm=commit
alias.df=diff
alias.gr=grep
alias.stt=status
alias.dff=diff --word-diff --ignore-all-space
Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'
alias.l=log --decorate --oneline
alias.ls=log --decorate --oneline --stat
alias.lg=log --decorate --oneline --graph
alias.unstage=reset HEAD --
alias.cancel=reset --soft HEAD^
|
プッシュ先の設定
| git push -u origin master
|
プロジェクトごとのユーザー指定
| [user]
email = phasetr@gmail.com
name = phasetr@gmail.com
|
| git config --local user.name "phasetr@gmail.com"
git config --local user.email "phasetr@gmail.com"
|
別の鍵・アカウントでプッシュ
| mv ~/.ssh
ssh-keygen -t rsa -f id_rsa_pt_github
|
- 該当プロジェクトに移動して
.git/config
を変更
| cd /path/to/proj
[user]
email = phasetr@gmail.com
name = phasetr
[remote "origin"]
url = git@github.com.pt:phasetr/AlgorithmsAndDataStructureByFSharp.git
fetch = +refs/heads/*:refs/remotes/origin/*
|
- 上記のurlの箇所, 「git@github.com.pt」の@以下がポイント
~/.ssh/config
に追記
| Host github.com.pt
User git
HostName github.com
IdentityFile ~/.ssh/id_rsa_pt_github
IdentitiesOnly yes
|
マージコミットのリバート
基本
次のコマンドを実行する.
| git revert -m [親番号] [コミットハッシュ]
|
確認コマンドは次の通り.
間違った場合は次のコマンドを実行.
| git reset --hard HEAD~
git revert -m 2 f60f24d
|
参考: -m, --mainline
この-m
は--mainline
の略でparent-number
を指定する. 基本的に1
か2
を指定する. git show
をした時に次のように出る.
| $ git show f60f24d
commit f60f24d34845fba4e038b3e165f74973b3a19580
Merge: 049d32b ebbcb6a
|
1
は049d32b
, 2
はebbcb6a
.
マージミス・リベースミスで失ったコミットの復旧法
状況
- ブランチなしの状態でコミットしてしまったときの対処
- 例えば次のようなメッセージが出て, しかもそのままでマージミスしてほしいコミットを失ったとき.
- 実例
- あるマシンで作業中に他のマシンでコミット・プッシュを忘れたことに気付く
- 他のマシンを立ち上げてコミット・プッシュ
- 作業中のマシンでpullしたらコンフリクト
- 適当にコミットしたら作業中の内容が消えてしまった
メッセージ
| [detached HEAD dbe8abd9] Improved in my pc
4 files changed, 295 insertions(+), 3 deletions(-)
HOME pull
You are not currently on a branch.
Please specify which branch you want to rebase against.
|
対処法
- 上記メッセージのように「detached HEAD hoge」と出ているはずなので, hogeの部分のコミットIDを何とかして探す
- ターミナルを落としていたりマシンを落としていたら,
git reflog
でがんばって探す - 直近コミットのはずなので希望を失わないこと
git merge <探したコミットID>
で消失分をマージする - 復旧!
無視されているファイル一覧
リポジトリの移行 git mirror
+BEGIN_EXAMPLE
git clone --mirror cd git push --mirror
+END_EXAMPLE
リベースを巻き戻す
- 参考
git reflog
でリベース前のコミットを参照 HEAD@{n}
で対応操作を指定する形でgit reset HEAD@{n} --hard
として巻き戻す
リモートからのcheckout
| checkout feature/Billing.Payment.Import
|
リモートで消されたブランチを消す
| git fetch --prune
git remote prune origin
|
リモートの追加
| git remote add 追加名 追加したいリポジトリ
|
リモートの削除
リモートブランチの取得
| git fetch origin branch-name
git branch -r
git checkout branch-name
|
リモートリポジトリの追加
| git remote add <RemoteRepositoryName> <RemoteRepositoryURL>
git remote add bb git@bitbucket.org:phasetr/reponame.git
|
ローカルの変更取り消し
svn
でいう revert
. どうしても svn
のときの言葉の癖が抜けないので自分用に記録.
新規追加したファイルまで消したければ次の通り.
ログ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | git log -2 --stat
commit 567ed0a9617e7d94c214b44b4d50ac16e2fa441d
Date: Tue Dec 26 13:52:44 2017 +0900
Improved in my pc
math_expedition.org | 508 +++++++++++++++++++++++++++++-----------------------
1 file changed, 288 insertions(+), 220 deletions(-)
commit 1ffdc3d6f6c59fb89233ccd978ff1bd8b6fd1a30
Date: Tue Dec 26 11:58:58 2017 +0900
Improved in my pc
office/work.org | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tips.org | 4 +-
2 files changed, 174 insertions(+), 1 deletion(-)
|
ログ 1行表示
| : git log -2 --oneline
: 567ed0a9 Improved in my pc
: 1ffdc3d6 Improved in my pc
|
ログ commitをアスキーグラフで表示
| git log -2 --graph
* commit 567ed0a9617e7d94c214b44b4d50ac16e2fa441d
| Date: Tue Dec 26 13:52:44 2017 +0900
|
| Improved in my pc
|
* commit 1ffdc3d6f6c59fb89233ccd978ff1bd8b6fd1a30
| Date: Tue Dec 26 11:58:58 2017 +0900
|
| Improved in my pc
|
ログ 各コミットの差分(変更点)を表示
ログ 指定した数だけの最近のコミットを表示
| git log -2
commit 567ed0a9617e7d94c214b44b4d50ac16e2fa441d
Date: Tue Dec 26 13:52:44 2017 +0900
Improved in my pc
commit 1ffdc3d6f6c59fb89233ccd978ff1bd8b6fd1a30
Date: Tue Dec 26 11:58:58 2017 +0900
Improved in my pc
|