
Gitは便利ですが複雑なシステムです。まず第一に、不注意によって間違いを犯す可能性があり、それを修正することは困難または不可能ですらあります。Gitのドキュメントには、バグの修正に役立つ多くのコマンドの説明が記載されています。
ただし、問題を解決するには、コマンドの正確な名前を知っている必要があります。そして、ここに典型的な鶏肉と卵の問題があります。この記事では、問題のある状況を解決するのに役立つコマンドについて説明します。
くそー、私は何か間違ったことをした。魔法のタイムマシンをください!
git reflog # you will see a list of every thing you've # done in git, across all branches! # each one has an index HEAD@{index} # find the one before you broke everything git reset HEAD@{index} # magic time machine

このコマンドを使用すると、問題の原因となったマージをロールバックすることにより、誤って削除されたデータを回復できます。refLogは非常に頻繁に使用されます-このコマンドの追加を提案してくれてありがとうとしましょう。
コミットしましたが、すぐに間違いに気づきました。修正する必要があります。
# make your change git add . # or add individual files git commit --amend --no-edit # now your last commit contains that change! # WARNING: never amend public commits
このコマンドを使用すると、何かをコミットした後、「=」記号の後にスペースがないなどの問題が発生したときに、不快な小さなことを修正できます。はい、2つをrebase -iと組み合わせることで、新しいコミットで変更を加えることができます。しかし、それは長い道のりです。
NB!パブリックブランチのコミットは絶対に変更しないでください。このコマンドは、ローカルブランチでのコミットにのみ使用してください。そうしないと、問題が発生します。
最後のコミットのメッセージを変えたい!
git commit --amend # follow prompts to change the commit message
それはただ...愚かな投稿要件です。
新しいブランチにあるはずなのに、誤ってマスターにコミットしました!
# create a new branch from the current state of master git branch some-new-branch-name # remove the last commit from the master branch git reset HEAD~ --hard git checkout some-new-branch-name # your commit lives in this branch now :)
すでにパブリックスレッドにコミットしている場合、コマンドは機能しません。この場合、HEAD〜の代わりにgit reset HEAD @ {元に戻すコミットの数を指定}が役立ちます。
まあ、私は間違って間違ったブランチにコミットしました
# undo the last commit, but leave the changes available git reset HEAD~ --soft git stash # move to the correct branch git checkout name-of-the-correct-branch git stash pop git add . # or add individual files git commit -m "your message here"; # now your changes are on the correct branch
多くの開発者がチェリーピックを使用している別の方法があります。
git checkout name-of-the-correct-branch # grab the last commit to master git cherry-pick master # delete it from master git checkout master git reset HEAD~ --hard
diffを実行する必要がありますが、何も機能しません。
変更が加えられていることは確かですが、diffが空の場合は、addを使用して変更のインデックスを作成した可能性があります。したがって、特別なフラグを使用する価値があります。
git diff --staged
一般的に、これはバグではなく機能ですが、それは明らかです¯\ _(ツ)_ /¯5
コミット前に行われたコミットを緊急に取り消す必要があります
# find the commit you need to undo git log # use the arrow keys to scroll up and down in history # once you've found your commit, save the hash git revert [saved hash] # git will create a new commit that undoes that commit # follow prompts to edit the commit message # or just save and commit
幸い、古いファイルと新しいファイルをコピーして貼り付けることで、5つのコミットに戻る必要はありません。元に戻すと、これをすべて元に戻すことができます。
さらに、コミットだけでなくファイル全体をロールバックできます。確かに、これらはすでに他のコマンドになります...
ファイルの変更を元に戻します
そしてここに、これらの他のコマンドがあります。
# find a hash for a commit before the file was changed git log # use the arrow keys to scroll up and down in history # once you've found your commit, save the hash git checkout [saved hash] -- path/to/file # the old version of the file will be in your index git commit -m "Wow, you don't have to copy-paste to undo"
この機会を最初に見つけたのは、COOL、COOL、K-R-U-T-Oでした。しかし、考えてみれば、ファイル内の変更を破棄するための最良のオプションがチェックアウトであるのはなぜですか?:shakes-fist-at-linus-torvalds:
すべて、私はあきらめます
cd .. sudo rm -r fucking-git-repo-dir git clone https://some.github.url/fucking-git-repo-dir.git cd fucking-git-repo-dir
EricVに感謝します。この方法について。そして、彼にsudoを使用することについてのすべての不満に対処します。
変更をゼロにして元のバージョンに完全にロールバックする必要がある場合は、それを試すことができます。ただし、覚えておいてください。これらのコマンドは破壊的で元に戻せません。
# get the lastest state of origin git fetch origin git checkout master git reset --hard origin/master # delete untracked files and directories git clean -d --force # repeat checkout/reset/clean for each borked branch
注意!この記事は、包括的なガイドを目的としたものではありません。そして、はい、同じことを行う他の方法があり、さらに良い方法があります。しかし、私は試行錯誤によってこれらのオプションを思いついた。それから私は自分の発見を共有するというクレイジーなアイデアを思いつきました。それを取るか、行く! SymbioWayのITスペシャリストリクルートセンターのディレクターであり、Skillboxオンライン大学バックエンドのエバンジェリストである

専門家の解説
Daniil Pilipenkoは、Gitとその開発者との関連性について意見を述べました。
Gitは2005年に登場し、市場を引き継ぐのに長い時間がかかりました。2008年に開発チームでSVNを実装していたときのことを覚えています。そして2012年でも、私の近くの会社がMercurialを大量に実装していました。何年にもわたって、Gitが最高のバージョン制御システムであり、現在ほとんどすべての開発者によって使用されていることが多くの人に明らかになっています。
あなたが仕事に応募しようとしている初心者の開発者なら、Gitを学ぶことを忘れないでください!バージョン制御システムとは何か、なぜそれが必要なのか、コミット、ブランチ、リポジトリのクローンを作成してサーバーに加えられた変更を送信する方法、サーバーから新しい変更を取得する方法、マージする方法、どのような種類の「リセット」があるかを知っておく必要があります。最初は、このトピックは理解できず難しいように思われるかもしれませんが、Gitの使用に慣れる必要があるだけで、それをやめることはできません。