如何放弃更改?

11

我经常从OpenSSL的git存储库中工作。其中一件事是通过发出make clean; make dclean来测试我的更改。

当我执行git pull时,由于所有开发人员清理工具都会被删除,因此git总是失败(请参见下文)。当它失败时,git告诉我“提交您的更改或隐藏您的更改......”。我不想提交、保存或隐藏它们,而是想放弃它们。

git abandon不是一个命令。放弃更改的命令是什么?


一个相关的问题是如何在git中丢弃未暂存的更改? 但答案是将它们藏起来(如果你读了这个问题,你会发现没有一个答案真正地回答了这个问题)。但我不想隐藏或保存它们,我只想放弃它们,这样我就可以执行git pull并继续工作。


$ git pull
remote: Counting objects: 2069, done.
remote: Compressing objects: 100% (872/872), done.
remote: Total 2069 (delta 1022), reused 589 (delta 589), pack-reused 608
Receiving objects: 100% (2069/2069), 3.13 MiB | 1.59 MiB/s, done.
Resolving deltas: 100% (1272/1272), done.
From https://github.com/openssl/openssl
   c40dba9..e0f9bf1  master     -> origin/master
   8a09500..d8a2353  OpenSSL-fips-2_0-dev -> origin/OpenSSL-fips-2_0-dev
   155ca14..f16093d  OpenSSL_0_9_8-stable -> origin/OpenSSL_0_9_8-stable
   690d040..aaa654d  OpenSSL_1_0_0-stable -> origin/OpenSSL_1_0_0-stable
   76b49a8..cc74177  OpenSSL_1_0_1-stable -> origin/OpenSSL_1_0_1-stable
   c59bd61..4d9dc0c  OpenSSL_1_0_2-stable -> origin/OpenSSL_1_0_2-stable
 * [new tag]         OpenSSL-fips-2_0_9 -> OpenSSL-fips-2_0_9
Updating c40dba9..e0f9bf1
error: Your local changes to the following files would be overwritten by merge:
    crypto/aes/Makefile
    crypto/asn1/Makefile
    crypto/bf/Makefile
    crypto/bio/Makefile
    crypto/buffer/Makefile
    crypto/camellia/Makefile
    crypto/cast/Makefile
    crypto/cmac/Makefile
    crypto/cms/Makefile
    crypto/conf/Makefile
    crypto/des/Makefile
    crypto/dh/Makefile
    crypto/dsa/Makefile
    crypto/dso/Makefile
    crypto/ecdh/Makefile
    crypto/ecdsa/Makefile
    crypto/engine/Makefile
    crypto/err/Makefile
    crypto/evp/Makefile
    crypto/hmac/Makefile
    crypto/idea/Makefile
    crypto/lhash/Makefile
    crypto/md4/Makefile
    crypto/md5/Makefile
    crypto/mdc2/Makefile
    crypto/modes/Makefile
    crypto/ocsp/Makefile
    crypto/pem/Makefile
    crypto/pkcs12/Makefile
    crypto/pkcs7/Makefile
    crypto/pqueue/Makefile
    crypto/rand/Makefile
    crypto/rc2/Makefile
    crypto/rc4/Makefile
    crypto/ripemd/Makefile
    crypto/seed/Makefile
    crypto/sha/Makefile
    crypto/srp/Makefile
    crypto/stack/Makefile
    crypto/ts/Makefile
    crypto/txt_db/Makefile
    crypto/ui/Makefile
    crypto/whrlpool/Makefile
    crypto/x509/Makefile
    engines/Makefile
Please, commit your changes or stash them before you can merge.
Aborting

git clean -df && git checkout -- 这个命令可以在 Git 中丢弃未暂存的更改。 - zedfoxus
感谢 zedfoxus。为了明确起见,我使用 git clone 检出代码,并直接开始工作。我没有本地副本,因为 OpenSSL 只有一个源代码集。因此,我直接从克隆中工作。这就是我想放弃更改而不重新检出的原因。(相关:我认为 git 在这里是错误的工具,因为只有一个源代码集,没有必要增加复杂性)。 - jww
嗨,Jeff,如果你使用了 git clone 命令,那么你已经在本地系统上完整地获取了远程仓库。Git checkout 不会重新克隆,它只是在不同分支之间切换你的本地副本。Git 是管理 OpenSSL 源代码的好工具,更多相关内容以后再说。 - zedfoxus
如果您使用VS Code,则每个文件都有一个按钮可用于放弃更改。 - zkilnbqi
3个回答

16

要与 HEAD 同步,需要

git reset --hard HEAD

9

-2

虽然@Willie Wheeler的答案很完美,我过去也用过它,但大多数情况下我都是在接收端,因为这个命令只是无条件地删除,没有任何反悔的机会。

你可以尝试使用 git reset --soft


3
这会保留文件的暂存状态。发帖者的意图是完全丢弃这些更改。 - Makoto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接