変更を加えたファイルを変更前に戻す
git reset --hard HEAD
追跡していないファイルを一括で削除できる.
git clean [-d] -n # 削除対象の確認 git clean -f # 削除実行 git clean -df # ディレクトリも含めて削除
https://github.com/${USERNAME}.keys
git diff
は workdir と staging の比較。
git diff --cached
または
git diff --staged
は repository と staging の比較。
見やすさのために
git diff --stat
# パッチファイルを作るとき(working vs staging) git diff > hoge.patch ## ↑は staging と workingdir の比較 ## 前回 commit と workingdir を比較する場合は git diff HEAD > hoge.patch # パッチを適用するとき(コミットを作らず working に展開) git --git-dir= apply -p1 hoge.patch # または patch -p1 < hoge.patch # パッチを戻すときは git --git-dir= apply -R -p1 hoge.patch ## というように -R オプションを付ければよい。
特定のディレクトリ以下について調べる場合は git diff –relative=hogedir で指定。
patch も base64 で共有するのが良いかも。空白などの情報が大切みたい。
以下のような流れで実行する
git bundle create v00_first.bundle master
git clone v00_first.bundle repo_name
git pull origin master しないといけない?git add hogehoge git commit -m "hogehoge"
git bundle create v01_diff.bundle HEAD~1..HEAD
git remote add diff_commit /path/to/v01_diff.bundle git pull diff_commit HEAD
git tagを付けるとgithubではReleaseとして出る
git tag -a v0.0.5 -m “version up” コミットハッシュしてgit push origin v0.0.5すると反映される.
git tag -d TAGNAME git push origin :TAGNAME
マージ済みコミットとかは残してブランチ名だけ削除してやる.
| ローカルブランチ | git branch -D foo |
| リモートブランチ | git push origin :foo |
| リモート追跡ブランチ | git branch -d -r bar-remote/foo-branch |
リポジトリの最初のコミットを空にしておくと何かと便利だったりする.
git commit --allow-empty -m "empty commit"
何も考えずに git add -A; git commit -m “save” してしまったとき,
稀に画像などを入れてしまうことがある.
git reset --soft HEAD^
でcommitコマンドを無かったことにする.
--soft はコミットだけ取り消し(HEAD)、 add したということ(インデックス)は残る。--mixed にすると addしたということも取り消せる。--hard にするとディレクトリの中身まで前のコミットの状態に戻ってしまう。前回のコミットからの作業内容が消える。コミットを push してから取り消したくなったとき、前述のコミット取り消しをしたあと、
git push origin +master
というように + を付けて push する
git fetch git reset --hard origin/master
git config --get remote.origin.url
git log -a --graph --oneline --decorate=full
Linux の場合
| 階級 | 設定ファイル場所 | メモ |
|---|---|---|
| system | /etc/gitconfig | 使わないこと推奨 |
| global | ~/.gitconfig (~/.config/git/config) | ユーザーごとに |
| local | .git/config | リポジトリごとに |
以下のように設定する.
git config --<階級> hoge.fuga.piyo <設定値>
設定可能な値の詳しいドキュメントは http://git-scm.com/docs/git-config.html にあるが,多すぎるので割愛.
git config --get hoge.fuga.piyo
git config --unset hoge.fuga.piyo
| 名前 | 値 | メモ |
|---|---|---|
core.editor | vim | エディタ |
remote.origin.url | リポジトリのURL | |
user.name | ||
user.email |
git rebase -i HEAD~<個数>
pick は変更せずに二行目以降の pick を s(squash) にする。すると指定した中で一番古いコミットに中身がまとめられるgit push -f origin master
git fetch git reset --hard origin/master
git log --pretty=fuller
で author date, commit date を確認
git rebase -i HEAD~<個数>
pick から edit にして閉じる.git commit --amend --date="Thu Feb 18 17:50:00 2021 +0900"
とコマンドを打つ
git rebase --continue
でブランチは元に戻る
git rebase HEAD~<個数> --committer-date-is-author-date
でcommit dateにも日付が適用される
git rebase -i HEAD~3
pick から edit に変更git commit --amend -m "新しいコメント"
git rebase --continue
git rebase HEAD~<個数> --committer-date-is-author-date
で日付が変更なしにできる
マージコミットや過去の複数のコミットを取り消すにはどうすればよいかという話。
コミット取り消しには reset と revert があるが、
基本的には revert が推奨らしい。ただし、reset のほうが考えることが少なくて便利。
また、マージコミットについては、revert で取り消すのはとても大変なので、
reset するべし。
とりあえず dev ブランチを作成して、そこに色々とコミットしていく。
一人で開発していると dev ブランチ開発中に master が進むことはほぼないと思うので 普通にマージすると Fast-Forward マージされて dev ブランチが消えてしまう。 なので強制的にマージコミットを作成してやる必要がある。
git checkout master git merge --no-ff dev git push origin master
マージしてしまえばブランチは消してしまって構わない。リモートのとローカルのものを消す。
git push --delete origin dev git branch --delete dev
git merge
のコマンドを実行したときにコンフリクトというメッセージが表示されることがある。
各ファイルを開いてコンフリクトを解消したのち、add と commit をする。
git add -A git commit -m "取り込み"
git diff --cached