我通过一个互动的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-branch
master并回滚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