我最近做了一个包含十个文件的提交。其中一个文件不应该被提交:它有我的本地测试更改,对其他人不起作用。
我想从以前的提交中检查该文件,然后将其重新提交为原始文件,然后在本地重新应用我的更改。
git revert
听起来不错,但它似乎是针对整个提交,而不是提交中的一个文件。有没有一种好方法可以解决这个问题,同时将 git chatter/logs 保持在最低限度?也许修改以前的提交?
如果有帮助的话,这些都还没有被推动。
我最近做了一个包含十个文件的提交。其中一个文件不应该被提交:它有我的本地测试更改,对其他人不起作用。
我想从以前的提交中检查该文件,然后将其重新提交为原始文件,然后在本地重新应用我的更改。
git revert
听起来不错,但它似乎是针对整个提交,而不是提交中的一个文件。有没有一种好方法可以解决这个问题,同时将 git chatter/logs 保持在最低限度?也许修改以前的提交?
如果有帮助的话,这些都还没有被推动。
git revert
听起来不错,但它似乎是针对整个提交,而不是提交中的一个文件。
没有轻松的方式来更改提交。如果您想更改现有提交中的哪怕一点点,您必须创建一个与原始提交类似的新提交(带有新的 SHA)。
有没有一种好方法可以解决这个问题,同时将 git chatter/logs 保持在最低限度?(也许修改之前的提交?)
如果有问题的提交不是分支上的最后一个,对git commit --amend
你没有多大帮助;看到这个解释。您可以使用git revert
或...
这些都还没有被推动,如果这有帮助的话......
由于您还没有推送到远程(是的,它确实有帮助),您始终可以执行交互式 rebase以从首次引入有问题的文件开始重写您的分支的历史记录。
如果它没有被推送——你是金子,你可以随心所欲地重写历史。
修改提交是一个好主意,如果您的提交是分支上的最后一个提交(如果不是 - 不用担心,因为它没有被推送,您无论如何都可以相当简单地重写历史)。要获取文件的“旧”版本,您可以使用命令从先前的提交中检出它git checkout COMMIT-HASH-ID path_to_file
。
因此,如果您的git log --oneline
外观输出如下所示 -
$ git log --oneline
9ab100f Your awesome 10-file commit message
e62c6d5 Merge pull request #607 from origin/someone-elses-feature
cfdf47a someone elses commit message
做就是了
git checkout e62c6d5 path/to/your_file_name.js
然后将其添加到舞台
git add .
然后修改
git commit --amend
看看历史,你应该一切都好。