我是主人,我做到了 rebase -i <my_branch>
明白啦:
noop
# Rebase c947bec..7e259d3 onto c947bec
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails …
Run Code Online (Sandbox Code Playgroud) 我正面临一个我不确定如何解决的问题.
我从我的分支机构对主人做了一次反对:
git rebase master
Run Code Online (Sandbox Code Playgroud)
并得到以下错误
First, rewinding head to replay your work on top of it...
Applying: checkstyled.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging AssetsLoader.java
CONFLICT (content): Merge conflict in AssetsLoader.java
Failed to merge in the changes.
Patch failed at 0001 checkstyled.
Run Code Online (Sandbox Code Playgroud)
所以我去了我最喜欢的编辑器,修复了1行冲突,保存了文件并执行了git状态并获得了以下输出:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: PassengerContactHandler.java
#
# …
Run Code Online (Sandbox Code Playgroud) 我有以下Git存储库拓扑:
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
Run Code Online (Sandbox Code Playgroud)
通过重新feature
分支我希望改变整个子树(包括子分支):
$ git rebase feature master
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
Run Code Online (Sandbox Code Playgroud)
但是,这是实际结果:
C' (feature)
/
A-B-F (master)
\ D (feature-a)
\ /
C
\
E (feature-b)
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过执行以下方法手动修复它:
$ git rebase --onto feature C feature-a
$ git rebase --onto feature C feature-b
Run Code Online (Sandbox Code Playgroud)
但有没有办法自动重组分支,包括其所有子/后代?
我们都听过一个人应该重订,从未发表的作品,它的危险,等等.但是,我还没有看到张贴如何处理的情况下衍合情况的任何食谱被出版.
现在,请注意,只有存储库仅由已知(并且最好是很小)的人群克隆,这才真正可行,这样无论谁推送rebase或重置,都可以通知其他人他们下次需要注意的时候取(!).
如果你没有本地提交foo
并且它被重新定位,我看到的一个明显的解决方案将起作用:
git fetch
git checkout foo
git reset --hard origin/foo
Run Code Online (Sandbox Code Playgroud)
foo
根据远程存储库,这将简单地抛弃本地状态以支持其历史记录.
但是,如果一个人在该分支机构进行了大量的本地更改,那么如何处理这种情况呢?
我有以下情况:
clone
从主存储库(X)创建了一个(Y),因为有许多人在Y上工作,我们没有做任何事情rebase
,只有merge
s.当我们想要将(push
)Y 传递给X时,我们想做一rebase
件事,以便让事情变得干净整洁问题在于,当rebase
我们被要求进行我们在之前merge
步骤中已经完成的所有合并时.有没有解决方案,除了意味着重新进行合并的那个?
我预计它会非常简单,因为我们已经解决了冲突的合并.
我是一个相当新的人,git
目前正在使用它来管理团队环境中的代码.我有一些变基础问题,我用它来修复它们
git checkout --ours filename.txt
git add filename.txt
git rebase --continue
Run Code Online (Sandbox Code Playgroud)
现在我想推送我的更改,然后运行以下命令
$ git push origin feature/my_feature_branch
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
To ssh://git@coderepo.com:7999/repo/myproject.git
! [rejected] feature/my_feature_branch -> feature/my_feature_branch (non-fast-forward)
error: failed to push some refs to 'ssh://git@coderepo.com:7999/repo/myproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能摆脱这个错误?
PS:我--force
尽量避免使用该选项.
我有一个应该可供其他贡献者使用的分支,并且应该始终与主人保持同步.
不幸的是,每当我做'git rebase'然后尝试推动时,它会导致'非快速前进'信息和推动堕胎.推动这里的唯一方法是使用--force.这是否意味着如果我的分支公开并且其他人正在研究它,我应该使用'git merge'而不是rebased?
我有一个分支'firstproject'有2个提交.我想摆脱这些提交并使它们显示为单个提交.
该命令git merge --squash
听起来很有希望,但是当我运行git merge --squash
终端时,只会显示该命令的选项.什么是正确的命令?
Commit 1:
Added 'homepage.html'
Added 'contacts.html'
Commit 2:
Added 'homepage.php'
Added 'homepage.php'
Deleted 'homepage.html'
Deleted 'contacts.html'
Run Code Online (Sandbox Code Playgroud) 我在待办事项中有以下内容git rebase -i HEAD~2
:
pick 56bcce7 Closes #2774
pick e43ceba Lint.py: Replace deprecated link
# Rebase 684f917..e43ceba onto 684f917 (2 command(s))
#
...
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试压缩第一个(56bcce7
)并通过在第一个之前添加"s"来选择第二个时,我得到以下错误:
Cannot 'squash' without a previous commit
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下它的含义,我该怎么做?
我想压缩第一个commit(56bcce7
)和"select and reword"第二个(e43ceba
)提交
我正在阅读:https: //wiki.diasporafoundation.org/Git_workflow#Rebase_your_development_branch_on_the_latest_upstream
这是一个摘录:
您的存储库是最新的
为了从开发中继获取最新更新,请执行一次性设置,通过输入以下内容将主GitHub存储库建立为远程:
Run Code Online (Sandbox Code Playgroud)$ git remote add upstream git://github.com/diaspora/diaspora.git
在最新上游重新启动您的开发部门
要使您的开发分支保持最新,请在上游主服务器的当前状态之上重新定义您的更改.看看什么是git-rebase?以下部分了解有关变基的更多信息.
如果您已经设置了上面详细说明的上游分支,以及一个名为100-retweet-bugfix的开发分支,那么您将更新上游,更新本地主服务器,并从中重新分配您的分支,如下所示:
Run Code Online (Sandbox Code Playgroud)$ git fetch upstream $ git checkout master $ git rebase upstream/master $ git checkout 100-retweet-bugfix
[确保在分支中根据需要提交所有内容]
Run Code Online (Sandbox Code Playgroud)$ git rebase master
为什么在这种情况下需要添加"远程上游"?我不是刚才做的:
$ git checkout master
$ git pull origin master
$ git checkout 100-retweet-bugfix
Run Code Online (Sandbox Code Playgroud)
[确保在分支中根据需要提交所有内容]
$ git rebase master
Run Code Online (Sandbox Code Playgroud)