web-dev-qa-db-ja.com

git reset--hardとgitcleanの違い

こんにちは私はこれらの2つのコマンドの違いに興味があります。彼らがここで紹介するとき: https://www.atlassian.com/git/tutorials/undoing-changes

Git reset --hardも、ステージングディレクトリと作業ディレクトリの両方を最新のコミットと一致するように設定しているように見えますが、最終的にはgit reset--hardは現在の作業ディレクトリを変更しないと言われています。だから私はここで非常に混乱しています、誰かがそれを明確にすることができますか?

22
AlexWang

彼らは2つの異なることをします。としましょう、あなたはGIT PULL次に、いくつかのファイルの編集を開始し、おそらくそれらの変更をプッシュに追加してコミットしました...そして、何らかの理由で、特定のファイルに加えられたすべての変更を破棄して、以前の状態に戻すことにしました。 。あなたがする場合には

$ git reflog
... snip ...
cf42fa2... HEAD@{0}: commit: fixed misc bugs
~
~
cf42fa2... HEAD@{84}: commit: fixed params for .....
73b9363... HEAD@{85}: commit: Don't symlink to themes on deployment.
547cc1b... HEAD@{86}: commit: Deploy to effectif.com web server.
1dc3298... HEAD@{87}: commit: Updated the theme.
18c3f51... HEAD@{88}: commit: Verify with Google webmaster tools.
26fbb9c... HEAD@{89}: checkout: moving to effectif

次のように、ロールバックするコミットを選択します。

git reset --hard 73b9363

HEADをリセットすると、すべての変更/ステージングされたファイルは失われます。

Gitcleanも。以下は git-scm.com がそれをどのように説明するかです。

DESCRIPTION
Cleans the working tree by recursively removing files that 
are not under version control, starting from the current directory.

Normally, only files unknown to Git are removed, but if the -x
option is specified, ignored files are also removed. This 
can, for example, be useful to remove all build products.

If any optional <path>... arguments are given, only those paths are affected.

リセットとクリーンおよびそれらの--optionsの詳細

lnydex99uhc:~  user$ git reset -h
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] <tree-ish> [--] <paths>...
   or: git reset --patch [<tree-ish>] [--] [<paths>...]

    -q, --quiet           be quiet, only report errors
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    -p, --patch           select hunks interactively

VS

 lnydex99uhc:~ user$ git clean -h
    usage: git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>...

        -q, --quiet           do not print names of files removed
        -n, --dry-run         dry run
        -f, --force           force
        -i, --interactive     interactive cleaning
        -d                    remove whole directories
        -e, --exclude <pattern>
                              add <pattern> to ignore rules
        -x                    remove ignored files, too
        -X                    remove only ignored files
12
zee