up::
subtree
【手順】git subtreeコマンドの使い方 - Qiita
Git Subtree 事始め - Qiita
消すときはディレクトリさえ消せばいい。コミットは残るが。
説明
サブリポジトリをメインリポジトリのブランチとして取り込むやり方。サブのhistoryがメインのhistoryに一緒に載る。
ちなみに最初のsubtreeで--squashしないと、メインhistoryにサブのこれまでのhistoryが一気に全部載る。squash推奨。
サブの変更をメインに反映するには、git subtree pushすればいい。これでサブのリモートに変更を反映できる。サブのローカルを更新するときはgit subtree pull。メインとサブは直接くっついているので、サブのローカルが更新されるとメインのローカルも更新される。この二つも--squashしないとhistoryが全部載るので注意。
注意点として、実はこのコマンドはgit merge -s subtreeで指定できるmergeのオプション、subtreeのラッパー。その関係上リモートにその操作のログは残らないため、メインをcloneした際にどれがsubtreeなのかという情報は消滅する。前述のとおりサブのhistoryはメインに残るためファイルを扱うだけなら問題は無いが、同じように作業したいならgit subtree addを使用してリンクしなおす必要がある。
mergeなので、メインからサブのhistoryだけ示すことは出来ない。
サブのlfsは非対応。
本当に、本当に複雑性が上がるのであまり推奨しない。
対応してるソフトもSourceTreeくらいだし。GitKrakenが対応していない。
Git subtree のパワー | Atlassian Japan 公式ブログ | アトラシアン株式会社
Git のマージ戦略のオプションとサンプル | Atlassian Git Tutorial
Differences between git submodule and subtree - Stack Overflow
git submodule と git subtree から見る外部リポジトリの取り扱い - tech.guitarrapc.cóm
split
subtree特有の機能。ディレクトリを切り出し、別のブランチとして切り分ける。
過去のコミットも切り分けて新しいブランチに反映するのが特徴。そのせいで、巨大なリポジトリでは時間がかかる。
--rejoinを付けると、次のsplit時にそれをつけてsplitした履歴より前を見なくなるらしい。
ちなみに、git subtree pushは中でsplitを使用している。
git subtree でリポジトリ in リポジトリを実現する│FORCIA CUBE│フォルシア株式会社
git-subtree移行メモ - Qiita
git lfs
大きいファイルを扱うときのやつ。
一つのファイルに対し、git上にポインターファイル、外部ストレージ上に実体、と分離する。
このシステム上、gitのポインターファイルはlfsであると認識させる必要がある。
.gitignoreが反映されない
キャッシュが残ってる。
git rm -r --cached [ファイル名]でキャッシュを削除すればいい。.で全指定しても問題ない。
大量のコミットを要求されるが、コミットログは.gitignoreを反映した部分しか残らない。
.gitignoreに記載したのに反映されない件 - Qiita
https vs ssh
sshの利点はパスワードを入力せずに済むこと。
httpsの利点は手軽。こちらでもパスワードを入力しない方法はあるが、その場合credential helperを使わないとセキュリティリスクになる。そのためPCでないとhttpsはほぼ使えない。
HTTPS vs SSH in git
termux ssh接続
文字化け
utf-8エンコードを指定する。
powershellならnotepad $PROFILEとして以下。
PowerShellでgit add -pを実行した際の日本語文字化け問題の解決策
bashならexport LESSCHARSET=UTF-8を.bashrcにでも書く。
https://www-creators.com/archives/78
特定ファイルの復元
logでファイルを見つけ、restoreで戻す。コミットを忘れず。
中身が知りたいならgit showを使う。
git log -- file
git restore --source=commitID^ -- file
Gitで、特定のファイルを削除したコミットを見つけて復元する方法 · GitHub
[git] 戻したい時よく使っているコマンドまとめ Git - Qiita
Gitで過去に削除したファイルを検索、復元させる方法
commitしたファイルや変更箇所は”git show”で確認できる Git - Qiita
You asked to pull from the remote ‘github’, but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
branchに設定されてるリモートブランチ(上流ブランチ、upstream branch)とpull対象が別だと怒られるやつ?
-u, もしくは—set-upstream origin/mainつけてpushすると上流ブランチがそっちに移る。
branchで直接いじる場合は-uか—set-upstream-to=origin/main。後者は=が必要。
上流ブランチがなくてエラーになった時の対応方法 Git - Qiita
ローカルブランチを上流ブランチにしたい
git push -u . プッシュしたいローカルブランチ名
Git で「追跡ブランチ」って言うのやめましょう Git - Qiita
上流ブランチに何が設定されているか知りたい
git branch -vv
リモートブランチを削除する
git push -d origin branch_name
pushを使うことに注意。
また、削除前にpullしたリモートブランチがローカルに残る問題はfetchで解決する。
git fetch —prune
もしくは
git fetch -p
常にこれを実行したい場合は、設定でprune=trueを書き込む。
git config —global fetch.prune true
[fetch]
prune = true
Gitのリモートブランチを削除するまとめ GitHub - Qiita
submodule消去
$ git submodule deinit -f 追加したサブモジュール
$ git rm -f 追加したサブモジュール
$ rm -rf .git/modules/追加したサブモジュール [git] submoduleの削除、再追加について Git - Qiita
git rmを忘れず。
bareとmirror
どちらもベアリポジトリをとれる。
mirrorはgit remote update時にHEADを最新に追従してくれる。
git clone時のmirrorとbareの違い | exMedia
secretを含んだファイルをpushしちゃった
git filter-repoで削る。
履歴を弄ることになるのでバックアップを取る。
あとstashが消えるのでなんとかしとく。
まずは元で履歴からファイルを削除する。
git rm -r --cached PATH
git commit -a -m "message"
git push次に新しくリポジトリをクローン。やらないとflesh clone云々でエラーが出る。
git clone URLsecretがあるとこを指定してfilter。
git filter-repo --invert-path --path PATHgit filter-repoを使用すると、リモートが削除される。
再度追加する。
git remote add URL最後に履歴を弄った分を強制pushして終了。
git push origin --force --allリポジトリからの機微なデータの削除 - GitHub Docs
公開予定でないソースをリモートにプッシュ・プルリクエストしてしまった時の対処法
GitHub & BitBucket HTML Preview
docs/content/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository.md at main · github/docs · GitHub
git filter-repoを使って過去のコミットの内容を書き換える | ikapblog
要するにめちゃくちゃ面倒(この後も個々のlocalやforkにはsecret残るので、それらの対処を行う)なので、最初から起きないようにするのが吉。
パブリックリポジトリならGitHub Secret scanning’s push protectionというのが使えるので、ONにしておく。
GitHub の Secret scanning’s push protection を試してみる
textとbinaryを分ける手法
先頭8000バイト以内にNULがあるかどうか。
Gitはどうやってテキストファイルとバイナリファイルを自動識別しているのか? diff - Qiita
取り消し
add前ならgit checkout -- .
個別にやるならgit checkout ファイル名orディレクトリ名
add後ならgit reset
個別ならgit reset ファイル名
コミット後ならgit reset --soft HEAD^
Gitの変更を取り消すには( git statusした時の modifiedの取り消し方やコミットの取り消し方など)
過去ファイルを検索して引っ張ってくる
git grep "Post" $(git log --pretty=format:%H -- ./src/CanvasNodesView.ts)
git log -p -- fileで対象の変更履歴を全部見られる。
git checkout (hash)
does not have a commit checked out
他でも起きるがsubmoduleで起きた。
git rm submoduleFolder
git submodule add submoduleURL
これでsubmoduleを追加しなおしただけ。
他に色々突っかかってたが、vscodeで一個ずつ削った。
git submodule がコンフリクトしたときの対処法 単に自分が古い場合編 - @kyanny’s blog
Submodule 同士でコンフリクリしたときの解決方法 - git | nju33
termuxで使う
termuxは/storage/emulated/0だと色々リンクとかで引っかかり倒す。
なので本体をhome直下に置きgit worktreeで読み取れる位置にセットするやり方。
gitコマンドはworktreeでセットしたところで使える。
ただ/storage/emulated/0ではなく~/storage/shared/から使う。
[Feature]: Make git usage on /storage/emulated/0 possible. · Issue #3777 · termux/termux-app
Git Worktreeをわかりやすく解説
徹底解説:git worktree の使い方 # Git - Qiita
でもgitui経由でlibgit使ったほうが安定するし……
git submodule update —init —remote
updateは親で記録しているコミットに子を更新。
—initは親clone時に空になっているsubmoduleの本体ファイルを親記録コミットを元にclone。
—remoteは親記録コミットを更新。
git submodule update [—init|—remote] を勉強し直す # Git - Qiita
repository path is not owned by current user
safedirectoryに追加。
`git config —global —add safe.directory /storage/emulated/0/Documents/Niztra/sonolart/.obsidian
/plugins/obsidian-wom
Conventional Commits
Conventional Commits
コミットメッセージに規範を導入する試み。
基本的にfix:かfeat:を前に付け、その後にコミットメッセージを続ける。fixがパッチバージョンでfeatがマイナーバージョン。
破壊的変更が入る場合はfix!:などとする。
stash
git stashだけで動く。取り出すときはgit stash pop。
【Git】stashコマンドのまとめと使い方 〜変更差分の一時退避〜 # 初心者 - Qiita
github-flowを使用する時
開発ブランチと本番ブランチのデプロイは、本番ブランチにいろんな機能が組み合わさっていく以上別物。開発ブランチのデプロイだけで全部分からない。
そこで本番ブランチのうち、タグを打ったコミットだけをデプロイする。
簡単だが確認フェイズを入れることで本番ブランチデプロイの品質を担保する。
コミットメッセージで検索、ハッシュから過去ファイル確認
git log --grep name --onelineでハッシュを手に入れ、
git show hash:fileで確認できる。fileは相対パス不可。