问题标签 [git-amend]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
824 浏览

git - git amend 也在暂存区添加了文件

我更改了很多文件并将它们添加到 Git 暂存区。然后,在提交它们之前,我意识到我必须更改之前提交的提交信息。所以,我做了一个git commit --amend并更改了提交消息,而不通过更改日志。好吧,这也将暂存区域中的文件添加到了先前的提交中。

我应该怎么做才能使先前的提交以其原始形式并将我更改的文件放回暂存区域,以便我可以单独提交它们?

对于它的价值,我意识到我应该先提交我的更改,然后使用git rebase -i.

0 投票
3 回答
25239 浏览

git - “还原”、“修改”、“回滚”和“撤消”提交之间有什么区别?

为了帮助我了解 git,以便我可以每天使用它,有什么区别:

  • 恢复
  • 修正
  • 回滚
  • 撤消

他们是什么,他们做什么?

0 投票
5 回答
26846 浏览

git - 如何在终端中确认“git commit --amend”后的更改?

当我写作时,git commit --amend我得到了某种编辑器,我可以在其中更改此提交的名称。如何使用键盘确认并保存我的更改?

0 投票
3 回答
10760 浏览

git - git commit --amend 合并两个提交

我有一个远程“开发”分支,并且正在本地处理它。

我使用提交消息“my_feature”在“dev”上进行了第一次提交,将我的本地分支放在远程之前 1 个提交。

然后我开发了一些新东西并制作了一个git add -u,准备提交。然后我意识到我想将之前的提交消息改写为“my_feature (1/2)”,以使我当前的提交消息为“my_feature (2/2)”,将我的本地分支放在远程之前 2 个提交。

所以我做了一个git commit --amend(认为它只会编辑上一个提交的消息),将“my_feature”提交消息编辑为“my_feature (1/2)”,然后......最终得到一个标记为“my_feature (1/2)”的提交"进行所有更改(第一次提交 + 暂存文件差异)——我的索引现在是干净的。

所以如果我做对了,我的命令实际上做了一个提交,还提交了暂存文件,它产生了一个(合并的?)提交?

我没想到 Git 会做这样的事情。我只是想编辑我的旧提交消息,而不是将旧提交消息与我当前的暂存文件合并。(现在我想它rebase本来可以更好。)

虽然我可以理解为什么git commit --amend可以提交(即使我只想编辑提交消息),但我很难理解 Git 如何使用命令将我的两个提交合并为一个commit

任何人都可以向我澄清这一点吗?

0 投票
1 回答
46 浏览

git - 修改最后 n 次提交并通过钩子向所有提交追加一行

我有一个本地代码审查过程,其中审查者在已审查的分支顶部添加一个空提交并将 s 发送回开发人员。

然后开发人员将其推送到规范。

我想编写一个 pre-push 钩子,它将查看最后一次提交是否表明代码已被审查,然后在分支上所有提交的提交消息中附加一个“PEER-REVIEWED”字样,然后将其推送到 Canonical!

(使用:我可以在我的规范中看到任何提交,看看它是否被审查过。如果它被审查过,那么它将有“PEER-REVIEWED”字样。)

  1. 该方法的实用性如何?
  2. 如何在所有被推送的提交的提交消息中自动附加单词。

谢谢!

0 投票
2 回答
60 浏览

git - 是否有一种轻触方式来更改意外提交的单个文件?

我最近做了一个包含十个文件的提交。其中一个文件不应该被提交:它有我的本地测试更改,对其他人不起作用。

我想从以前的提交中检查该文件,然后将其重新提交为原始文件,然后在本地重新应用我的更改。

git revert听起来不错,但它似乎是针对整个提交,而不是提交中的一个文件。有没有一种好方法可以解决这个问题,同时将 git chatter/logs 保持在最低限度?也许修改以前的提交?

如果有帮助的话,这些都还没有被推动。

0 投票
1 回答
270 浏览

git - Git:允许修改提交而不删除历史

Git 中是否有允许修改中央存储库中的提交的选项(例如更改描述、提交者姓名或他/她的电子邮件地址),但不允许删除整个历史记录。

据我了解,默认情况下两者都是允许的(receive.denynonfastforwards = false)。

0 投票
2 回答
676 浏览

git - git 镜像到 GitHub 并过滤私有文件

目前正在做一个项目。我们希望用完整的信息(作者等)开源我们的日常提交,同时过滤掉一些特定的私人文件夹。

假设我在分支 master 中提交 A/file1 和 B/file2,我希望将其镜像到 GitHub 上并过滤 B 文件夹(此提交只有 A/file1)。

我想这样做的一种方法是远程更新挂钩:

  • 列出 newref 添加的所有新提交(比如说 lastfoundcommit..newref)
  • 逐一修改这些提交(从 lastfoundcommit 到 newref)以删除不需要的文件
  • 在此过程中,它可能会创建一个本地主过滤分支(如果它有助于在本地拥有它)
  • 将此分支推送到公共存储库
  • 以某种方式在私有和公共提交之间保留提交 ID 的映射,以便在下次推送时轻松计算“lastfoundcommit”

理想情况下,它可以是双向的(即,如果我们也可以导入回 github 分支并拉取请求,并让它们“重新定位”在我们的私有存储库之上,无论是自动还是通过简单的过程——可能并不难因为它可能只是一个变基)。

这有点类似于 git-subtree 可以做的,除了它不是提取子目录而是过滤各种文件。

这看起来可行吗?或者有什么其他建议?(可能基于 git filter-branch?或任何其他可能对我有帮助的现有工具/脚本?)

注意:子模块不是一个可行的选择,因为它们可能很稀疏并且会妨碍太多。此外,“私人”文件列表可能会随着时间的推移而扩展/更改。

0 投票
0 回答
372 浏览

git - 与另一个分支合并后更改先前的提交消息

我有一种情况,我需要更改分支上先前提交的提交消息(我们称之为 BranchA)。我知道我可以使用该分支上的交互式变基来更改消息git rebase -i <commit-number>

问题是我已经将该分支与另一个本地分支(BranchB)合并。所以问题是我需要更改 BranchA 和 BranchB 中的提交消息。合并是在禁用快进的情况下执行的(例如git merge --no-ff BranchA)。

我是否正确 git 会认为这两个分支中的目标提交是单独的提交?我假设 git 将 BranchA 和 BranchB 中的相同提交视为单独的原因是因为当我更新 BranchA 中的提交消息时,BranchB 中的相同提交保持不变。

这是否意味着我只需要在两个分支上执行交互式变基来更改每个分支上的消息?如果我这样做,是否会导致以后在合并等方面出现问题?

0 投票
1 回答
2332 浏览

git - git commit --amend - 未进行更改时更改提交哈希

我愿意更正我对此的理解,但我不确定为什么会发生这种情况。

使用 git 时,我知道如果我对文件进行更改然后提交它,我会得到一个新的哈希,因为文件已更改。

我的理解git commit --amend是我可以对最后一次提交进行更改。

现在我可以理解,如果我更改提交消息,哈希值就会改变。

但是当我不做任何更改而只是保存并退出编辑器时(我可能已经改变了需要更改的想法)为什么哈希会改变?我所有的文件和一切都是一样的,但我已经保存了它。当我的git log提交时间没有改变时,它只是在日志中出现两次,相同的时间,相同的消息,相同的文件,除了不同的提交哈希。

如果没有进行任何更改,为什么它会更改?