我通过一个互动的rebase让自己陷入困境,现在我想放弃它.(即回到我被放入交互式rebase模式之前的点,在我的情况下,通过git pull --rebase.)这样做的方法似乎是通过git rebase --abort,但这不起作用:
$ git rebase --abort
error: Ref refs/heads/master is at 55b388c141b1485b1acd9e050dbeb0eb90ef2ee7 but
expected b918ac16a33881ce00799bea63d9c23bf7022d67
fatal: Cannot lock the ref 'refs/heads/master'.
Could not move back to refs/heads/master
Run Code Online (Sandbox Code Playgroud)
如何退出交互式rebase模式,并清除所有对它的引用?(git reset --hard成功,但不会让我退出rebase模式.)
我正在使用一个中间Git存储库镜像远程SVN存储库,人们可以从中进行克隆和处理.中间存储库的主分支从上游SVN每晚重新定位,我们正在开发功能分支.例如:
remote:
master
local:
master
feature
Run Code Online (Sandbox Code Playgroud)
我可以成功地将我的功能分支推回到远程,并最终达到我的期望:
remote:
master
feature
local:
master
feature
Run Code Online (Sandbox Code Playgroud)
然后我重新设置分支以跟踪远程:
remote:
master
feature
local:
master
feature -> origin/feature
Run Code Online (Sandbox Code Playgroud)
一切都很好.我想从这里做的是将功能分支重新绑定到远程主分支,但我想从我的本地机器上执行此操作.我希望能够做到:
git checkout master
git pull
git checkout feature
git rebase master
git push origin feature
Run Code Online (Sandbox Code Playgroud)
使远程主控分支与远程主服务器保持同步.但是,这种方法导致Git抱怨:
To <remote>
! [rejected] feature -> feature (non-fast-forward)
error: failed to push some refs to '<remote>'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again. See the
'Note about fast-forwards' …Run Code Online (Sandbox Code Playgroud) 我试图为解释编辑旧提交信息在这里.
问题是,现在,当我试图运行rebase -i HEAD~5时说interactive rebase already started.
所以然后我尝试:git rebase --continue但是得到了这个错误:
error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba
fatal: Cannot lock the ref 'refs/heads/master'.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我们使用git并拥有一个主分支和开发人员分支.我需要添加一个新功能,然后将提交重新设置为master,然后将master推送到CI服务器.
问题是,如果我在rebase期间遇到冲突,我不能在rebase完成后推送到我的远程开发人员分支(在Github上),直到我拉出我的远程分支.这会导致重复提交.没有冲突时,按预期工作.
问题:在rebase和冲突解决之后,如何在不创建重复提交的情况下同步我的本地和远程开发人员分支
建立:
// master branch is the main branch
git checkout master
git checkout -b myNewFeature
// I will work on this at work and at home
git push origin myNewFeature
// work work work on myNewFeature
// master branch has been updated and will conflict with myNewFeature
git pull --rebase origin master
// we have conflicts
// solve conflict
git rebase --continue
//repeat until rebase is complete
git push origin myNewFeature
//ERROR
error: failed to push some …Run Code Online (Sandbox Code Playgroud) 我有一个git分支(称为v4),它是昨天由master制作的.掌握了一些变化,我想进入v4.因此,在第4版中,我尝试从master执行rebase,并且一个文件不断搞砸:一行文本文件,其中包含版本号.此文件是app/views/common/version.txt,在变基之前包含此文本:
v1.4-alpha-02
Run Code Online (Sandbox Code Playgroud)
这是我正在做的事情:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run …Run Code Online (Sandbox Code Playgroud) 当我运行'git gui'时,我会得到一个弹出窗口
This repository currently has approximately 1500 loose objects.
然后建议压缩数据库.我以前做过这个,它将松散的对象减少到大约250,但这并不会抑制弹出窗口.再次压缩不会改变松散物体的数量.
我们当前的工作流程需要大量使用'rebase',因为我们正在从Perforce过渡,而Perforce仍然是规范的SCM.一旦Git是规范的SCM,我们将定期进行合并,并且应该大大减轻松散的对象问题.
与此同时,我真的想让这个"有用"的弹出窗口消失.
我理解Pro Git中关于风险的方案dev.作者基本上告诉你如何避免重复提交:
不要将已推送到公共存储库的提交重新绑定.
我将告诉你我的具体情况,因为我认为它不完全适合Pro Git场景,我仍然最终得到重复的提交.
假设我与当地同行有两个远程分支机构:
origin/master origin/dev
| |
master dev
Run Code Online (Sandbox Code Playgroud)
所有四个分支包含相同的提交,我将开始开发origin/dev:
origin/master : C1 C2 C3 C4
master : C1 C2 C3 C4
origin/dev : C1 C2 C3 C4
dev : C1 C2 C3 C4
Run Code Online (Sandbox Code Playgroud)
经过几次提交后,我将更改推送到master:
origin/master : C1 C2 C3 C4
master : C1 C2 C3 C4
origin/dev : C1 C2 C3 C4 C5 C6 # (2) git push
dev : C1 C2 C3 C4 C5 C6 # (1) git …Run Code Online (Sandbox Code Playgroud) 我正在尝试压缩一系列提交 - HEAD到HEAD~3.有没有快速的方法来做到这一点,还是我需要使用rebase --interactive?
有没有办法将一个提交从一个分支重新绑定到另一个分支?
我有这个分支结构:
-- -- -- -- -- (Master)
\
-- -- -- -- -- XX (Feature-branch)
Run Code Online (Sandbox Code Playgroud)
我想要做的就是将最后一次提交改为Feature-branchmaster并回滚Feature-branch一次提交.
-- -- -- -- -- XX (Master)
\
-- -- -- -- -- (Feature-branch)
Run Code Online (Sandbox Code Playgroud)
我怎么做?
git ×10
rebase ×10
branch ×2
git-rebase ×2
abort ×1
exit ×1
git-gc ×1
git-gui ×1
git-merge ×1
interactive ×1
merge ×1
quit ×1
repository ×1
squash ×1