▶ 技術めも
git メモ
用語
■ ワークツリー
↓ git add/rm/mv ↑ git checkout
■ ステージング
↓ git commit ↑ git reset HEAD
■ ローカルレポジトリ
↓ git push ↑ git fetch ↕ git diff origin/master (fetch後)
■ リモートレポジトリ
コマンド
直前の comit を取り消し
git reset --soft HEAD^
add を取り消し
git reset HEAD readme.txt
git管理下のものだけを add 更新
git add -u .
ブランチの派生元を最新に付け替える
git rebase
ローカルレポジトリからpullして、ブランチの派生元を最新に付け替える
git pull --rebase origin master
前回のコミットに追加
git commit -m "1st commit"
touch hoge2
git add .
git commit --amend -m "1st fix"
git reset --hard HEAD^
git diff --cached
alias gitlog='git log --graph --oneline --decorate --all'
親ブランチ確認
git show-branch | grep '*' | grep -v "$(git rev-parse --abbrev-ref HEAD)" | head -1 | awk -F'[]~^[]' '{print $2}'
git rebase master コンフリクト
@see
https://www-creators.com/archives/1938
git rebase でコンフリクトが起きた場合は、そこでいったん rebase 処理が停止。
競合を解決し、git add してから git rebase --continue を実行。
git rebase --abort コマンドを実行することで、いつでも rebase を途中終了(なかったことに)。
stash
未 commit がある状況で別のブランチに切り替えて作業したい
- 退避
save は省略可能
git stash save
- 退避一覧
git stash list
stash@{0}: WIP on sub: a0d2f1b add fourth line
stash@{1}: WIP on sub: 1a61919 add second line
- 取り出しと同時に stash 削除
git stash pop stash@{0}
- 取り出し
git stash apply stash@{0}
- stash 削除
git stash drop <消したいstash名>
LINK
git pull と git pull –rebase の違いって?図を交えて説明します!
https://try.github.io
LearnGitBranching
いつやるの?Git入門
こわくない Git
Gitのよく使うコマンド
初期設定
git config --global user.name "[NAME]"
git config --global user.email "[E-MAIL]"
git config --global color.ui true
git config --global alias.co checkout
git config --global alias.st status
git config --global alias.br branch
git config --global alias.ci commit
git config --global push.default upstream
git config -l
PUSHコマンド
- git push コマンド
git push origin ローカルブランチ:リモートブランチ
デフォルトではローカルブランチと同名のブランチがリモート上にあるならそれらを一気にPUSH。危険
git push
- (1)ブランチ名を明示的に指定
git push origin br01
- (2)デフォルトの挙動を"upstreamモード"に変更
git config --global push.default upstream
git push
カレントブランチとリモートブランチの間に「追跡関係」がある場合のみ、カレントブランチのPUSH
- (3)デフォルトの挙動を"currentモード"に変更(Git1.7.11以降のみ)
git config --global push.default current
git push
カレントブランチのPUSHのみが実行
- (4)デフォルトの挙動を"simpleモード"に変更(Git1.7.11以降のみ)
git config --global push.default simple
git push
カレントブランチと同名のリモートブランチが存在する場合のみ、カレントブランチのPUSHが実行
@see http://dqn.sakusakutto.jp/2012/10/git_push.html
いろいろ
master を編集してしまった場合
git branch -m branch01
いまの master をリネーム(マスターは消える)
リモートリポジトリが更新されているかどうかを確認
git fetch 後にdiffをとる
git fetch origin
git diff origin/master
gitに対して明示的にパーミッションを教えてあげる
実行権限を付与するとき
git update-index --add --chmod=+x [filename]
実行権限を外すとき
git update-index --add --chmod=-x [filename]
コンソール表示
# show git branch
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
function precmd() {
PROMPT="\h@\u:\W\$(parse_git_branch) \$ "
}
function proml {
PS1="\h@\u:\W\$(parse_git_branch) \$ "
}
proml
デプロイプログラム PHP
deploy.php
<?php
$lockFile = '/tmp/deploy_lock.txt';
// ロック
if (! @symlink(__FILE__, $lockFile)) {
echo 'Locked: '.$lockFile.PHP_EOL;
exit(0);
}
$flagFile = '/tmp/deploy_flag.txt';
$flag = file_get_contents($flagFile);
if (empty($flag)) {
unlink($lockFile); // ロック解除
exit(0);
}
system('/home/deploy/gitdeploy.sh >/tmp/deploy_log.txt 2>&1');
file_put_contents($flagFile, '');
unlink($lockFile); // ロック解除
exit(0);
gitdeploy.sh
#!/bin/bash
date "+%Y/%m/%d %H:%M:%S"
echo ""
cd /var/www
make pull-master
pre-commit
#!/bin/sh
cd /xxxx
vagrant ssh -c "make --directory /vagrant/xxxx phpunit"
if [ $? -ne 0 ]; then
exit 1
fi
vagrant ssh -c "make --directory /vagrant/xxxx phpcs"
if [ $? -ne 0 ]; then
exit 1
fi
> git branch -a
* master
remotes/origin/master
チェックアウトしたいブランチが表示されていない時
> git fetch
リモートブランチをチェックアウト
> git checkout -b other_branch origin/other_branch
github
https://zenn.dev/masso/articles/06945b09962cc77c0328
リポジトリのアクセス権限は、read、write、adminの3段階だった。
そこに新たに、readとwriteの間に「triage (トリアージ)」が、writeとadminに「maintain」が新しく追加された。
triageは、write権限はないがissueに対応できるもので、maintainは、ほぼadminと同じだがリポジトリ削除などの危険な権限はない。
操作 | Read | Write | Admin | Owner |
---|---|---|---|---|
全てのリポジトリに対する、pull/push/clone | ○ | |||
メンバーのteam managerへの変更 | ○ | |||
メンバーのoutside collaboratorへの変更 | ○ | |||
リポジトリの作成 | ○ | ○ | ○ | ○ |
リポジトリの削除 | ○ | ○ | ||
リポジトリの設定変更 | ○ | ○ | ||
リポジトリの公開設定変更 | ○ | ○ | ||
リポジトリのorganizationアカウント下/外への移転 | ○ | ○ | ||
teamへのリポジトリの割り当て | ○ | ○ | ||
リポジトリにoutside collaboratorを追加 | ○ | ○ | ||
リポジトリからoutside collaboratorを除去 | ○ | ○ | ||
teamリポジトリからpull | ○ | ○ | ○ | ○ |
teamリポジトリへpush | ○ | ○ | ○ | |
teamリポジトリをfork | ○ | ○ | ○ | ○ |
teamリポジトリのforkからpull requestを送信 | ○ | ○ | ○ | ○ |
pull requestのmerge/close | ○ | ○ | ○ | |
保護されたbranchでのpull requestのmerge1 | ○ | ○ | ||
pull requestに対するreviewのsubmit | ○ | ○ | ○ | ○ |
pull requestのmergeabilityに影響するreviewのsubmit | ○ | ○ | ○ | |
issue の open | ○ | ○ | ○ | ○ |
issue の close/reopen/assign | ○ | ○ | ○ | |
自らopenしたissueのclose | ○ | ○ | ○ | ○ |
label/milestoneの適用 | ○ | ○ | ○ | |
自分に対するissueの割り当て2 | ○ | ○ | ○ | ○ |
releaseの作成と編集 | ○ | ○ | ○ | |
下書き段階のreleaseの閲覧 | ○ | ○ | ○ | |
発行されたreleaseの閲覧 | ○ | ○ | ○ | ○ |
自らのコメントの編集と削除 | ○ | ○ | ○ | ○ |
他の人のコメントの編集と削除 | ○ | ○ | ○ | |
wikiの編集 | ○ | ○ | ○ | ○ |
statusの作成 | ○ | ○ | ○ |