作为Git的用户,我经常遇到这种情况,我需要重新修改一个或多个提交,这种提交方式不适合–amend或修改提交。 通常我会做类似的事情 git reset HEAD~1 # hack, fix, hack git commit -a # argh .. do I need to retype my message? 我认为合理的提交信息非常严重。 它们通常包含更大的文字,并带有参考和理由的变化。 到现在为止,我对通过未分类的git reflog , git log和复制和粘贴过程恢复旧的提交消息的冗长过程感到非常恼火。 有没有更好的解决这个问题? 如果我包含多个提交,那又怎么样呢? 编辑:有一点思考后,我想我正在寻找的是一些git提供消息修复/修改提交不适当的提交消息。
虽然大多数时候reset和checkout有不同的用法,但是我看不出这两者之间有什么区别。 可能有一个,或者没有人会join一个 – –hard选项来做一些基本的checkout 。 也许有什么不同,你会看到历史的方式?
例如,在下面的master分支中,我只需要提交af5c7bf16e6f04321f966b4231371b21475bc4da,这是由于之前的rebase而导致的第二个: commit 60b413512e616997c8b929012cf9ca56bf5c9113 Author: Luca G. Soave <luca.soave@gmail.com> Date: Tue Apr 12 23:50:15 2011 +0200 add generic config/initializers/omniauth.example.rb commit af5c7bf16e6f04321f966b4231371b21475bc4da Author: Luca G. Soave <luca.soave@gmail.com> Date: Fri Apr 22 00:15:50 2011 +0200 show github user info if logged commit e6523efada4d75084e81971c4dc2aec621d45530 Author: Luca G. Soave <luca.soave@gmail.com> Date: Fri Apr 22 17:20:48 2011 +0200 add multiple .container […]
我正在学习Git。 我很困惑 git rm –cached file 和 git reset file 这两个命令似乎把文件从上演到不上演区域。 这些命令如何不同?
我试图学习如何有效地使用Git,我想知道我应该如何(良好的做法/不好的做法?)解决以下情况: 假设我在master中有如下的提交链: 初始提交 提交1 提交2 提交3 然后我意识到在最后两个提交中完成的是完全错误的,我需要再次从提交1开始。 问题: 我该怎么做? 我可以把委托2和委托3分到一个单独的部门以备将来参考(说他们毕竟不是那么糟糕),并继续从委托人1到主人?
我们都听说过,不应该把已发表的作品重新发布,这是危险的。但是,我还没有看到任何关于如何处理这种情况的食谱,以防出版物发行。 现在请注意,如果知识库仅由一个已知的(最好是小的)人群克隆,那么推动重新署名或重置的人可以通知其他人下一次他们需要关注取(!)。 我看到的一个明显的解决scheme将工作,如果你有没有本地提交foo ,它得到重定位: git fetch git checkout foo git reset –hard origin/foo 这将简单地抛弃foo的本地状态以支持其远程存储库的历史logging。 但是如果一个人在这个分支上进行了实质性的地方性改变,那么我们如何处理呢?
$ git reset — <file_path>可以通过path重置。 但是, $ git reset (–hard|–soft) <file_path>会报告如下的错误: Cannot do hard|soft reset with paths.
更新 :这将工作更直观的Git 1.8.3,看到我自己的答案 。 想象下面的用例:我想摆脱我的Git工作树的特定子目录中的所有更改,保持所有其他子目录不变。 我可以做git checkout . ,但git结帐。 添加稀疏结帐排除的目录 有git reset –hard ,但不会让我做一个子目录: > git reset –hard . fatal: Cannot do hard reset with paths. 再说一遍: 为什么git不能通过path进行硬/软重置? 我可以使用git diff subdir | patch -p1 -R来修改当前状态 git diff subdir | patch -p1 -R ,但这是一个很奇怪的做法。 什么是这个操作适当的Git命令? 下面的脚本说明了这个问题。 在How to make files注释下面插入正确的命令 – 当前命令将恢复应该被稀疏检出排除的文件a/c/ac 。 请注意,我不想明确地恢复a/a和a/b ,我只是“知道” a并且想要恢复下面的所有内容。 […]
GitRef.org – 基本 : git rm会从暂存区删除条目。 这与git reset HEAD有些不同,它会“暂停”文件。 我的意思是说,在我们开始修改事物之前,将其暂存区恢复到那里。 另一方面, git rm只是将文件踢出整个舞台,以便它不包含在下一个提交快照中,从而有效地删除它。 默认情况下,一个git rm file将完全移除临时区域中的文件,也会从您的磁盘>(工作目录)中删除该文件。 要将文件保留在工作目录中,可以使用git rm –cached 。 但是git rm –cached asd和git reset head — asd究竟有什么区别呢?
我错误地使用命令“git add dir”添加文件。 我还没有运行“混帐提交”。 有没有办法从提交中删除这个目录和其中包含的所有内容? 我试过git reset dir ,但它没有工作。 显然git reset file是撤消它的方式。 但是我有这么多的文件和很less的时间。