我在提交消息中写了错误的东西.或者,我忘了包含一些文件.
如何更改提交消息/文件?提交尚未被推送.
我有master跟踪远程分支的分支origin/master.
我想将它们重命名为master-old本地和远程.那可能吗?对于跟踪的其他用户origin/master(以及经常更新其本地master分支的用户git pull),重命名远程分支后会发生什么?他们git pull仍然会工作还是会抛出一个它再也找不到的错误origin/master?
然后,继续,我想创建一个新的master分支(本地和远程).再说一次,在我这样做之后,如果其他用户这样做会发生什么git pull呢?
我想这一切都会带来很多麻烦.是否有一种干净的方式来获得我想要的东西?或者我应该保持master原样,并创建一个新的分支,master-new然后继续在那里工作?
有没有之间的差异git rebase upstream/master和git pull --rebase upstream master,如果是这样,是什么?遥控器可以是任何遥控器,不一定是上游遥控器.
所以我的一个同事意外地进行了合并,实际上只保留了树的一面.于是他开始合并,删除了合并引入的所有更改,然后提交了合并.
这是我在测试仓库上做的一个简单的测试用例.这个回购有三个分支.idx是意外合并的主题分支,master是主线.dev只是测试revert -m如何工作,所以你可以忽略它.

我想要做的是恢复错误的合并.所以从主人我尝试运行,git revert -m 1 <sha1sum of faulty merge>但然后git响应:
# On branch master
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
所以它实际上并没有创建撤消合并的恢复提交.我相信这是因为合并实际上并没有包含任何真正的变化.
如果你想玩我的测试报告,你可以从这里下载它
这是一个git bug,还是我错过了什么?
我刚开始使用git.Rebase是很棒的东西.我应该在一个特定的早期案例中使用它.
是否有一种完全可以接受的方法来为了明确的提交而重新提交旧的提交?
关于强迫a的问题和答案git push不难发现(这里有两个).标准答案是这样的:
如果你有强制
git push,在技术上你可以使用的--force选项,但在程序上,你不应该因为有人可能已经拉到某处一只小猫会死.
我认为这通常是圣人的建议 - 更安全的路线是再次提交,修复你所破坏的任何东西.但是,让我们说,例如我知道(神奇地)没有人拉过提交.或者更好的是,这是一个私人回购,因此首先没有打破别人克隆的危险.
推动是否会产生其他 [负面]后果--force,特别是技术后果?也许它会导致遥控器上的一些额外垃圾,或者它破坏了X Corps分析工具的1.2.3版本,或者它使得后期更加混乱,等等.任何事情?
编辑1:我有自己的轶事证据表明,--force荷兰国际集团的私人回购推不似乎造成任何问题.不过,我对感知不感兴趣; 我正在寻找参考和/或证明.
与Git合作,我不得不回到特定的提交.我做了一些更改,现在我想提交它们.这样做的正确方法是什么?
我的项目现在处于分离-HEAD状态.如果我提交,我的更改是否会被保存
git commit
Run Code Online (Sandbox Code Playgroud)
?否则,我该怎么做才不会丢失我的更改?
我用了
git reset --hard dc082bc...由于一些错误的提交,恢复到分支回到所需的先前状态.这让我当地的分公司很好.但是,我想将'origin'上的分支回滚到同一个commit,以便我可以重新开始.谁能告诉我如何将原始分支(非主人)恢复到此提交?
我已经尝试过git push origin master,但它给出了以下错误
! [rejected] branch -> branch (non-fast-forward) error: failed to push some refs to 'git@github.com:xxx/xxx.git' To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes before pushing again. See the 'Note about fast-forwards' section of 'git push --help' for details.
我正在寻找我希望的简单的一行命令来确定当前检出的分支的正确上游引用?
基本上是这样的
git branch --remote HEAD
哪个(如果有效)将符号模式HEAD转换为当前分支名称,然后该选项--remote将其更改为远程跟踪分支的ref.(但它没有那样做!)
如果我有morehelp一个配置的分支
remote = origin
merge = refs/heads/morehelp
Run Code Online (Sandbox Code Playgroud)
简单的命令行将返回refs/remotes/origin/morehelp它的上游跟踪分支(适用于git reset --hard <ref>通过覆盖更新的情况)
我正在与一个刚接触git的开发人员合作,我想设置一个git工作流,让我审核这个开发人员的提交(并可能拒绝他们)而不强迫他改变他的工作(这很容易出错)对于新用户).
这是场景:
master分支仅包含经过审核的代码devel分支是由分支master分支创建的devel分支机构上工作并推送他的代码供我审核devel分支上做更多的提交以解决问题master分支上提交,添加我自己的注释并将提交标记为开发人员编写的master分支合并回他的devel分支以下是此方案的直观说明:

在这个序列之后,如果开发人员在其他一些提交之后再次推送他的分支,我怎么能100%确定开发人员在"犯错/重做"序列期间犯的错误不会再出现devel?
最好的解决方案是让开发人员devel反对他的分支master,但这对新git用户来说是一项艰巨的任务.
如果这个工作流程有任何错误,请建议我另一个我可以在将它们合并到主分支之前审核提交的地方.
编辑
一位朋友向我建议了一个看起来很有希望的方向:提交时的--fixup选项.
--fixup=<commit>构造一个用于的提交消息
rebase --autosquash.提交消息将是指定提交的主题行,前缀为"fixup!".有关详细信息,请参阅git-rebase.
开发人员可以使用此选项将第二次和第三次提交正确标记为第一次提交.探索的好方法......
git ×10
git-branch ×2
git-commit ×2
commit ×1
git-amend ×1
git-pull ×1
git-rebase ×1
git-workflow ×1
merge ×1
rebase ×1
reverting ×1