gitのチェックアウトのためのカンニングペーパー、隠し場所、リセット、クリーン、リバート、リベース
11802 ワード
Originally posted at michaelzanggl.com. Subscribe to my newsletter to never miss out on new content.
Gitはあなたが徐々に学ぶこれらのものの一つです.あなたは
git add .
ステージファイルにgit commit -m “message”
最終的にローカルにコミットするgit push
リモートリポジトリにプッシュする.しかし、時間をかけてミスを犯すと、常にGoogleとランダムなコマンドで貼り付ける場合は、簡単にコマンドの全くの量によって混乱を得る可能性があります
git reset
, git revert
, git clean
, git checkout .
, git rebase -i
, git commit --amend
など.一緒に一人で行きましょう!目次
重要な用語を理解する
いつでもより多くのヘルプを見つけることができますhere , しかし、重要な用語を理解することは重要です.
git add
これは、インデックスファイルにファイルを追加します.したがって、ステージングはインデックスと同じです.detached HEAD
, 例えば、古いコミットをチェックするとき.git add .
カレントディレクトリを参照します.したがって、カレントディレクトリとすべてのサブディレクトリのすべてのファイルがステージになります.我々は、ドットを使用するいくつかのより多くのコマンドを学びます.元に戻す
git stash -u
これはすべての追跡されていないファイル(- uフラグ)を保存し、ステージを変更し、変更を変更します.
再度最新の隠し場所を取得するには
git stash apply
あなたの隠しリストを清潔に保つには、また、実行することができますgit stash pop
代わりに.それは適用と同じですが、また、隠し場所リストから適用された隠し場所を削除します.用途
git stash list
すべてのストアドのリストを取得するには.ユースケース:あなたは何かに取り組んでいますが、突然支店を変更する必要があります
ボーナス:どのような隠し場所に何を知っているには、実行してあなたの隠しノートを与えることができます:
git stash push -u -m "your message"
元に戻す:何かを最新のコミットまたはメッセージを変更するに追加
git commit --amend -m "added file and changed message to this"
amend
より多くのファイルを最新のコミットに加えることができます.ユースケース:コミットの一部である必要がある特定のファイルをステージに忘れてしまった.
ボーナス:ファイルがまだ“メッセージ”を変更するには、“修正”オプションでコミットすることができますが追加されていない場合でも.
他の人があなたのブランチに取り組んでいるならば、最新のコミットがすでに発表されたときに修正しないように注意してください.必要になる
git push --force
アンステージファイル( precommit )
git reset .
よく見られる
git reset
例:echo "code code code" >> index.js
git add .
git reset .
それは単にunstageindex.js
変更を作業ツリーに戻します.あなたが適用することができます--hard
フラグを完全に変更を取り除く.ユースケース:習慣のうち、すべての変更を使用してステージを使用して
git add .
, しかし、彼らをseparetelyにコミットする特定のファイルを非表示にします.ボーナス:あなたがそれと同じ方法を行うことができます特定のファイルのみをunstageに
git add
git add User.js UserController.js UserService.js
git reset UserService.js User.js
これは続くUserController.js
ステージ.反転( precommit )
git checkout .
git checkout
はブランチを変更するために使用されますが、代わりにfilepathをチェックすると、別の目的があります.ローカルでファイルを変更した場合は、インデックスやコミットのいずれかで変更を取り消します.すぐにその上で.
例:
echo -n "1" >> newfile
git add .
git commit -m "added newfile"
echo -n "2" >> newfile
それで、私たちは新しいファイルをつくりました.あなたが現在走るならば
git checkout newfile
この場合、ローカルの変更は削除されます.あなたの作業ツリーは再びきれいになります.の間にステージングを開始するときに何が起こるかを見てみましょう.これはあなたに新しい視点を与える
git add
, これまで以上に強力なコマンドを作る.echo -n "1" >> newfile
git add .
git commit -m "added newfile"
echo -n "2" >> newfile
git add .
echo -n "3" >> newfile
これは異なる状態のファイルの内容ですgit checkout newfile
コンテンツを削除するだけです3
あなたのローカル変化から.言い換えれば、インデックス内のファイルを見つけた場合、それはインデックスで何であるかによって変更されます.それはまだ持ちますnewfile
内容“12”でステージ.また、“2”を削除するには、最初に私たちが学んだようにファイルを非表示にし、再度チェックアウトする必要があります.
git reset
git checkout .
Since it only replaces the files with those from the index / HEAD,
git checkout
won't do anything with untracked files.
use case :ファイルAを修正し、ファイルBを変更するときには、ファイルAの変更が実際に必要とされていないことがわかりました.
あなたがチェックアウトしたいファイルがブランチと同じ名前を持つのに十分不幸であるならば、あなたはこのようにチェックアウトしなければなりません
git checkout -- master
マスターブランチをチェックアウトするのを避けるために.ファイル/ディレクトリを削除します
git clean -f
同様
git checkout .
という違いで、それは追跡されていないファイルでのみ動作します.あなたは走ることができるgit clean --dry-run
or git clean -n
どのファイルが永久的に削除されるかを確認します.追加する-d
ディレクトリを含むフラグ.touch newfile
git clean -d -n
出力はWould remove newfile
ボーナス使用git clean -i
インタラクティブなクリーニングを開始するには、それぞれのファイルを個別に行う上でより多くのオプションを与える.新しいコミットでコミットを戻す
git revert
commit-id
コミットIDの変更を破棄し、新しいコミットを作成します.
ユースケース:プッシュされているコミットは、バグを引き起こし、反転する必要があります.
ボーナス:適用
-e
or --edit
コミットメッセージを変更するフラグ.たとえば、このコミットを戻す必要がある理由を追加できます.新しいコミットなしで最新のコミットを削除する
git reset HEAD^
あなたが事故で何かを犯すと想像し、コミットを取り消したい.
git reset HEAD^
それは決して起こらなかったように最新のコミットを元に戻して、変更をあなたのローカル作業木に戻します.それは新しいコミットを作成しません、そして、最新のコミットは歴史から消えます.見た
git reset
すでにファイルを展開する前に.しかし、コミットを渡すときには、実際に頭を任意のコミットにリセットすることができます.あなたがコミットA、BとCを持っていると想像してくださいgit reset A
意志は最新のコミットになります、そしてgit log
, あなたは、BとCをもはや見つけません.私たちは
git reset HEAD^
作業ツリーの変更を保持します.つまり言い換えればgit reset HEAD^
頭とインデックスをリセットします.使用する
--soft
頭をリセットするだけのフラグです.staged
.使用する
--hard
フラグをリセットする頭、インデックス、および作業ツリーは、変更を完全に削除されることを意味します.の代わりに
git reset HEAD^
また、書き込むことができますgit reset HEAD^1
, git reset HEAD~1
or git reset HEAD~
.他の人があなたのブランチで働いているならば、あなたがリセットしたコミットがすでに発表されたとき、前のコミットに頭をリセットしないように注意してください.必要になる
git push --force
ユースケース:ローカルで変更をコミットしましたが、間違ったブランチにコミットしていることに気付きました.ボーナス:ちょうど最新のコミットよりもリセットする4つの方法の合計があります.
これらの4行すべてが最後の2つのコミットをリセット
git reset HEAD^2
git reset HEAD^^
git reset HEAD~2
git reset HEAD~~
Bonus 2 :git reset
実際に最新のコミットを削除しません、それは単にあなたが望むコミットに頭を「ロールバック」します.BとCはまだ30日間保存されます.歴史を変える
インタラクティブな再構築について簡単に調べましょう.我々は学んだ
git reset HEAD~1 --hard
最新のコミットを削除する方法です.我々は、それがより強力であるだけで、インタラクティブrebasingと同じことを達成することができます.rebase
今回は実際にコミットオブジェクトを変更し、頭を特定のコミットに向けるだけではありません.git rebase -i HEAD~4
私たちは同じHEAD~4
とgit reset
前に.4あなたが再ベースしたいコミットの数を参照します.これでエディタが開きます次のコンテンツ
pick 123a44b0 your latest commit
pick C23a44b0 commit 3
pick B23a44b0 commit 2
pick A23a44b0 commit 1
# Rebase ...
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
置き換えましょうpick 123a44b0 your latest commit
pick C23a44b0 commit 3
pick B23a44b0 commit 2
pick A23a44b0 commit 1
そばpick 123a44b0 your latest commit
fixup C23a44b0 commit 3
f B23a44b0 commit 2
drop A23a44b0 commit 1
ご覧の通り、オプションのように書くこともできますfixup
または省略名を使用するf
この場合これはつぶれます
C23a44b0
and B23a44b0
into 123a44b0
, それを解雇する.Regarding A23a44b0
, このコミットは完全に削除されます.それで、一旦ベースが完成するならば、あなたは1つのコミットだけで終わります123a44b0
.他の人があなたのブランチの上で働いているならば、あなたがrebaseをするコミットがすでに発表されたとき、再ベースにならないように注意してください.必要になる
git push --force
ユースケース:あなた自身のブランチで一人で作業していて、PR/Mr .のコミットのクリーンなリストを持ちたいです.ボーナス:あなたも、リスト内に表示される順序を変更することによってコミットを移動することができます.
ブランチを削除する
git checkout master
git branch -D branch-to-delete
ユースケース:コミットの束を反転するのではなく、時々それはあなたのローカルブランチを削除し、再度それをチェックアウトするだけで高速です.
リモートブランチを削除する
git push origin branch-to-delete --delete
ユースケース:あなたが選択した名前を実現するプッシュ後に意味をなさないし、それを変更したいgit branch -m "new-name"
)結論
Gitはマスターするための全くの獣です、そして、私は確かにこれらの仕事のいくらかを成し遂げる他の方法があると確信します.あなたが知っていればコメントを残してください、私はリストにそれらを追加することができます.
この記事があなたを助けたならば、私は書くソフトウェアを単純化することに多くのヒントを持っていますhere .
Reference
この問題について(gitのチェックアウトのためのカンニングペーパー、隠し場所、リセット、クリーン、リバート、リベース), 我々は、より多くの情報をここで見つけました https://dev.to/michi/undo-changes-in-git-cheat-sheet-for-git-checkout-stash-reset-clean-revert-rebase-i-amend-2h1hテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol