问题标签 [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.
git - Git - 分离头、修改提交和推送时落后的问题?
我们的团队正在使用 git 子模块,但是我们在 pull 时遇到了一些错误,这告诉我们即使我们最近更新了(并且从那以后没有远程提交/推送),我们还是落后了。这发生在两种情况下:
- 在我们的子模块中分离
HEAD
,或 - 使用时
git commit --amend
。
我将尝试展示这些事情发生的场景。我的问题是,有谁知道具体错误在哪里,以及修复它们的简单方法(比我们的肮脏黑客更好)?
场景 1 - 分离式HEAD
- 我们发行:
git clone --recursive $REPO $DIR
git sfe 'git pull origin master'
git submodule update --recursive
- 我们实际上并没有使用这么多,因为它往往使我们处于分离HEAD
状态
- 我们检查所有分支是否都打开
master
(或至少不处于分离HEAD
状态)git sfe 'git branch'
。如果没有,我们发出一个git sfe 'git checkout master'
. (我们目前都(约 4 人)在 master 上开发,只是为了尽量减少合并和启动和运行) - 如果我们处于 detached
HEAD
,进行更改,然后切换到master
(因此我们的未暂存文件保留在工作目录中),暂存并提交这些更改,然后尝试推送,Git 说我们必须拉动,因为我们落后了。我们可以通过以下方式解决这个问题:- 说“拧它”,检查一个完全干净的超级模块,确保我们没有处于分离状态
HEAD
,然后从那里开始工作 - 获取修订号,
git checkout master
然后发出 agit merge $REV
并经历重新合并当前更改与似乎存在的过去更改冲突的痛苦。
- 说“拧它”,检查一个完全干净的超级模块,确保我们没有处于分离状态
场景 2 - 修改提交
- 这个不多。我将自己开发,发布 a
git commit --amend
,然后尝试推动这些更改。但是,当我这样做时,它告诉我我落后了,必须合并。当我这样做时,将所有当前更改与过去的修订重新合并,这又是一个痛苦的过程。- 这是因为我试图推送基于不再是的提交的东西
HEAD
吗?
- 这是因为我试图推送基于不再是的提交的东西
注意:git sfe
是我们的别名git submodule foreach --recursive
(我们有一些嵌套的子模块,只是为了自虐[或者更确切地说,我们需要能够将代码分离出来并且子子模块的放置是有意义的事实])
git - 当没有什么要修改的时候,为什么 git amend 不警告你?
我经常犯的错误是在提交后立即对文件进行更改,然后运行git commit --amend
然后快速git push -f origin master
显然,问题是我从来没有跑过git add foo.md
。所以我的修改实际上并没有修改我提交的任何代码。
问题是:为什么 git 在修改没有更改的提交时不警告您?更好的是,为什么它甚至可以成功完成?它只是在更改给定提交的时间戳时表现得像“触摸”吗?
git - 是否可以使 git commit 不可修改?
有没有办法保护给定的 git commit 不被修改?
我能想到的就是编写一个预提交挂钩来检查 SHA 与“不可修改”SHA 列表。有谁知道标准/更好的方法?
谢谢。
git - git commit --amend 不询问消息
不时地,我发现自己使用相同的信息进行提交修改。
通常,我会:
- 将我的更改添加到暂存区。
- 做
git commit --amend
。 - 等待文本编辑器打开。
- 保存并关闭它(不更改消息)。
无论如何要告诉 git 我不想更改提交消息(跳过打开我的文本编辑器并保存消息的步骤)?像:
- 将我的更改添加到暂存区。
- 告诉 git 将我的暂存区域修改为最后一次提交,而不要求我提供另一条消息。
我知道我可以避免 git 通过执行git commit --amend -m "<message>"
. 但是这样我就不得不重新输入消息。
git - 如何在 git 分支上更改作者姓名
前几天我分支了我的 github 项目以创建静态页面,但搞砸了我的作者姓名
https://github.com/ronaldsuwandi/le-simplepage/commits/gh-pages
如何为分支的第一次提交重命名作者?
我试过了
但没有运气 - 我对 git 还是很陌生..
编辑:如果我想更改第一次提交, Amber给出的答案不起作用(例如,如果我的提交历史是A-B-C-D
并且我想更改B
I can do的提交历史git rebase -i A
。但我不确定如果我该怎么做想改变自己的提交历史A
。
git - 如何在 Gerrit 中创建新的补丁集?
我是 Gerrit 的新手,想在提交新更改时创建一个新补丁。我使用本指南设置 Gerrit https://review.typo3.org/Documentation/install-quick.html
然后我尝试使用http://gerrit.googlecode.com/svn/documentation/2.0/user-changeid.html创建一个新补丁,并Change-Id
在提交消息的底部添加一行。
但我得到的是新的变更而不是新的补丁集。谁能帮我?
谢谢
git - 修改推送的提交消息
我刚刚推送了一个提交,然后意识到我需要更改提交消息。
所以在我的本地仓库中,我做了:
但是当我试图推动这个时,我收到了大量的错误消息说
这是修改我的信息的错误方法吗?最后,我不得不重置我所有的存储库,然后用一条新消息再次提交。
所以我的问题是,修改已推送内容的提交消息的正确方法是什么?
git - 提交的回购范围的变基
考虑这行提交。
我从分支开始foo
,偶尔会bar
从foo
. 现在,当我h
在 branch中进行 commit 时bar
,我意识到我在 commit 中犯了一个错误c
。所以,我运行git rebase
并打开提交c
进行编辑。我进行更改,将它们暂存并运行git rebase --continue
。
现在,我的bar
分支已更新。但是,foo
分支仍然指向 commit 的原始有缺陷版本c
。
有没有一种方法来运行一个 repo 范围的 rebase,其中包含指向特定提交的指针的所有分支都被识别和 rebase,一次一个?
我知道手动方式 - 重新设置 foo 并插入/挑选新的 SHA,但它需要我知道哪些分支引用了提交。而且需要体力劳动。
git - Git 存储是否修改?
我知道它们存在于 中git reflog
,但是如果我将提交推送到远程存储库,然后进行修改git push --force
(警告:pushing --force
通常应避免到远程存储库),我覆盖的提交是否会存在于某处?
git - how the git commit --amend working together with gerrit?
I staged and committed 5 files and pushed it gerrit, but before it is merged in to git, I updated 3 of them then I git commit --amend to the last commit, and if I do push to gerrit again, does this second path contains the updates in the other two files?