banner
Koresamuel

Koresamuel

Sometimes ever, sometimes never.
github
twitter
email

gitの一般的な操作とシナリオ

ここでは、いくつかの一般的な操作や作業で遭遇するシナリオのみを記録します。

いくつかの概念を統一する必要があります。

  • ワークスペース:ローカル環境です
  • ステージングエリア:git add <ファイルパス>コマンドを入力すると、そのファイルの変更がステージングエリアに配置されます
  • ローカルリポジトリ:git commit -m "この変更の説明"コマンドを入力すると、変更がローカルリポジトリに配置されます
  • リモートリポジトリ:git pushコマンドを入力すると、変更がリモートリポジトリ(例:GitHub、GitLab など)に配置されます

それらの関係は以下の図に示すようになります

Mermaid Loading...

以下は設定できる一般的なエイリアスです

alias.amd=commit --amend --no-edit
alias.am=commit --amend
alias.br=branch --sort=-committerdate
alias.ci=commit
alias.co=checkout
alias.cp=cherry-pick
alias.df=diff
alias.drop=stash drop
alias.pci=!git fetch origin master && git rebase origin/master && git push
alias.la=log --oneline --decorate --graph --all
alias.last=log -1 HEAD --stat
alias.ls=log --graph --pretty=format:'%Cred%h%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset %C(yellow)%D%Creset' --abbrev-commit
alias.lg=log --stat
alias.pl=pull --rebase origin master
alias.pop=stash pop
alias.pr=pull --rebase --recurse-submodules
alias.rc=rebase --continue
alias.ri=rebase -i HEAD~10
alias.root=rev-parse --show-toplevel
alias.save=stash save
alias.sl=stash list
alias.st=status
alias.sup=submodule update --init --recursive
alias.unstage=reset HEAD --

また、記事で言及されているコマンドはテスト済みですが、実際の作業環境に適用する前に必ず効果を試してください。修復不可能な結果を引き起こす可能性があるためです。
<>を含むすべてのものは変数であり、必要に応じて置換する必要があります。置換する際には、コマンドにこの記号を含めないでください。

直前のブランチに素早く切り替える#

git co -

ローカルブランチを削除する#

git branch -d <branch-name>

リモートブランチを削除する#

git push origin --delete <branch-name>

リモートで削除されたがローカルにまだ存在するブランチを削除する#

git remote prune origin

ローカルブランチの名前を変更する#

git branch -m <new-branch-name>

commit を元に戻す(新しい commit として)#

git revert <commit-id>

特定の commit に戻り、その後の commit を削除する#

revert との違いは、reset または commit-id 以降のすべての commit をリセットまたは削除することです

git reset <commit-id> # デフォルトは--mixedパラメータ

# --mixed:ワークスペースの変更コードを削除せずに、commitを取り消し、git add .を取り消さない
# --soft:ワークスペースの変更コードを削除せずに、commitを取り消さない
# --hard:ワークスペースの変更コードを削除し、commitを取り消す
git reset --mixed HEAD^ # 直前のバージョンに戻り、これによりHEADが現在の前のcommitにリセットされ、ステージングエリアがHEADと一致するようにリセットされますが、これで終了です。ワークスペースは変更されません

git reset --soft HEAD~3 # 3つ前のバージョンに戻り、commitの情報のみが取り消され、ステージングエリアとワークスペースは戻る前と同じ状態になります。コミットする場合は、直接commitすればよいです

git reset --hard <commit-id> # 指定したcommit-idの状態に完全に戻ります。ステージングエリアとワークスペースも指定したcommit-idのバージョンの内容になります

現在の変更を保存してコミットしない#

git stash

現在の変更を保存する(追加されたファイルも含む)#

git stash -u

すべての stash をリストアップする#

git stash list

特定の stash の状態に戻る#

git stash apply <stash@{n}> # nを変更してください

直近の状態に戻り、stash リストから削除する#

git stash pop

すべての stash を削除する#

git stash clear

特定の stash 内の特定のファイルの変更を適用する#

git diff <stash@{n}> -- <file-path> # 適用する前にdiffを確認できます
git co <stash@{n}> -- <file-path>

すべてのトラックされたファイルをリストアップする#

git ls-files -t

すべてのトラックされていないファイルをリストアップする#

git ls-files --others

トラックされていないファイルを削除する#

cleanコマンドは、新しく作成されたファイルを削除するために使用できます。ファイル名を指定しない場合、すべての作業中の untracked ファイルが削除されます。注意点は 2 つあります:

  1. clean 後、削除されたファイルは元に戻せません
  2. トラックされたファイルの変更には影響せず、untracked ファイルのみが削除されます
git clean <file-path> -f # 実際には手動で削除する方が良いです

トラックされていないディレクトリを強制的に削除する#

git clean <directory-name> -df # 実際には新しく作成されたディレクトリとファイルが削除されますが、元に戻せません

gitignore に記録されたファイルをクリアする#

 git clean -X -f

A ブランチにあって B ブランチにない commit を表示する#

git log A ^B

任意のブランチの特定のファイルの内容を表示する#

 git show <branch-name>:<file-name>

commit メッセージのキーワードで commit を検索する#

git log --all --grep='<finding-message>'
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。