git


初心者/入門/チートシート

記事:


コミット間の差分を抽出し、アーカイブファイルを作る

commit1=origin/master
commit2=HEAD
output=archive.zip
git archive $commit2 $(git diff --name-only $commit1 $commit2 --diff-filter=ACMR) -o $output

記事:


remoteの疎通確認


Secretlint: 機密情報のコミットを防止


変更点を戻す


grep: リポジトリ内の検索


pre-commit/post-commit: コミット前後に処理を入れる


git daemon: ローカルフォルダをgit remoteとして設定する


ファイル名の一括置換


switch/restore: checkoutの代わり


容量の大きいリポジトリをなるべく小さく取得


バージョン番号のtagを降順に表示

x.y.zで区切られたタグをバージョンの降順に表示したい。


指定行がいつ削除されたかを探す


削除されたファイルを探す


リポジトリのメンテナンス/軽量化


BFG Repo-Cleanerで履歴を削除


git filter-branch 履歴から削除


sparse checkout: 部分チェックアウト

git cloneはremoteと同じリポジトリを全てチェックアウトするため、巨大なリポジトリだと遅い。


merge済みbranchの一括削除

または


Gitea: 1バイナリ動作のGitHub風サーバ


branchやtagをソートして表示


gc: ガベージコレクタの実行

時々自動で実行されるが、手動で実行したい時。

git gc --auto

バックアップ/リストア


log: ログの表示


add:


rebase:

作業ブランチで開発中に、先に進んだmasterからの差分に変えたい時。

git co working_branch

# origin masterが先に進んだ場合、そこまでbaseを進める
git pull --rebase origin master

# コンフリクトした場合、ファイルを修正してadd
git add path/to/file
git rebase --continue

git push origin working_branch

fixup: 複数コミットを一つにまとめる

例:

git co -b work
# 作業コミット

# commit1にまとめたい場合、commit2〜3のpickをfixupに変えて保存。コメントの変更は反映されない。
git rebase -i origin/master

--
pick 98c99fe commit1
fixup c4599fe commit2
fixup ecd0587 commit3
--

subversionからの移行

sudo yum install git git-svn

SVN_REPO=example
SVN_REPO_PATH=file:///var/www/svn/$SVN_REPO/
mkdir $SVN_REPO
cd $SVN_REPO/
git svn init -s --prefix=svn/ $SVN_REPO_PATH
time git svn fetch

削除し忘れたlocal branchの処理

local branchが必要なのか分からなくなった場合。


ファイル/ディレクトリの変更差分を全て表示

git log -p <file or directory>

show: 指定コミット内容表示


SSL connect error


reflog: やりすぎたresetや削除したbranchを戻す

reset --hardをやりすぎた時に戻す。 削除したbranchを戻す。 ただし、コミットしてないファイルは戻ってこない。


書籍


.gitignore 特定パターンを無視

.gitignore に入れたパターンは「git status」等で差分として表示されなくなる 親フォルダにまとめて記載しておけば、子フォルダにも適用される。

# vimの作業ファイル
*.swp [#vc3fcd3c]

# subversionのディレクトリ
.svn/

# macOSの不要ファイル
.DS_Store

# windowsの不要ファイル
Thumbs.db

# ansibleのリトライファイル
*.retry [#cd80a5a4]

間違ったmergeを取り消す

# git log --graph で誤り前のコミットidを探す。この例では「aa123456」とする
git reset aa123456 --hard

# treeを見て間違ったマージより先に取り込みたいコミットがあれば、cherry-pickやmergeで取り込む
git cherry-pick <commid it>
git merge <commid it>

# force pushで強制的に修正
git push -f origin release/1.10

--force-with-lease: -fの代わりに使う

作業ブランチでrebase後、pushしたい時など。


fatal: Not possible to fast-forward, aborting.


authorを後から変更

git commit --amend --author="user <user@example.com>"

パーミッション変更を無視する

Linuxで開発しているリポジトリをWindowsでcloneして編集しようとすると、パーミッションの違いが検出されて邪魔な時がある。

git config core.filemode false

# 確認
git config -l | grep core.filemode

空白を無視して比較


git-secrets: AWSキー等をgithubに流出するのを防ぐ

うっかりAWSキー等がgithubに流出している事故が多い。
(実際に流出するとAWSからメールが来て、AWSアカウントが制限状態になる。該当キーを削除するまで続く)


merge: マージ


リモートブランチとローカルブランチを強制的に一致させる


デプロイワークフロー/ブランチ、タグ運用

メジャーなフローがあるので必要に応じて選んだり、カスタマイズすると良さそう

CentOS6.xにgit v2.xをインストール

CentOS6.xにgit v1.7.2をインストール

  1. rpmforge リポジトリを使えるようにする
  2. インストール
    sudo yum install --enablerepo=rpmforge-extras git
    
    git --version
    git version 1.7.12.4

gitの設定を表示


git bisect: 二分探索によって問題箇所を特定する


subtree: 外部リポジトリを取り込む


submodule: 外部リポジトリを取り込む


Mac OS Xにgitクライアントのインストール

  1. git−1.7.2.2-intel.leopard.pkg を実行
  2. ターミナルからパスを通すスクリプトを実行
    ./setup\ git\ PATH\ for\ non-terminal\ programs.sh
  3. ターミナルの再起動。gitコマンドで使えるか確認

空ディレクトリをgitに入れる

そのままだと管理されないので".gitkeep"ファイルを入れる

mkdir dummy
touch dummy/.gitkeep
git add dummy

work flow: ワークフロー


リモートで削除されたブランチをローカルから削除

git fetch --prune origin

tag: 別名を付ける


cherry-pick: 特定のコミットだけを適用する


cherry-pick中止


範囲を指定してcherry-pick


リモートリポジトリのURLを変更したい場合

git remote -v
git remote set-url origin <新しいリポジトリのURL>

bash用コマンド補完とプロンプトにブランチを表示

GUIクライアント


改行コードの自動変換を止める

git for windowsではデフォルトで、改行コードの自動変換される。

vi ~/.gitconfig
----
[core]
    autoCRLF = false
----

reset:取り消し


diff:差分


branch:ブランチ


branchに最新のmasterを取り込む

# 作業中ブランチに切替
git co mybranch

git fetch origin
git merge --no-ff origin/master

patchコマンド用diffファイルの作成

git diff --no-prefix HEAD~ > hoge.patch
patch --dry-run -p0 < hoge.patch
patch -p0 < hoge.patch

stash/autostash:変更を一時的に待避


untracked filesもstashする


brame:誰が行を変更したのかを探す


.gitconfig


fatal: The remote end hung up unexpectedly

公開鍵(~/.ssh/id_rsa.pub)/秘密鍵(~/.ssh/id_rsa)が無いと起きる


svn exportと同様に使う


origin等の別名をつける

よくoriginやmasterといった名前が出てくるが、これは".git/config" に記載があるため。
直接編集しても結果は同じ


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-04-10 (水) 23:15:04