我有一个分支B,在另一个仓库中检出,然后在那里进行了一些更改,在rebase之后,他们被推送到--force(这是最后一次提交的修正)。 现在,如果我将更改后的分支拉入第一个仓库,我就会遇到合并冲突。
我运行的命令(无关的更改,简化实际输出)如下:
# First checkout the original B
$ pwd
/home/user/dir1
$ git checkout B
Switched to branch 'B'
Your branch is up-to-date with 'origin/B'.
# Now clone the same repo into another directory and checkout B there
$ cd .. && git clone git clone ssh://git@myhost/myrepo.git dir2 && cd dir2
$ git checkout B
Switched to branch 'B'
Your branch is up-to-date with 'origin/B'.
# Now edit some file, commit it and "merge" the changes
# to the originally last commit as a fixup
$ nano file.txt
$ git commit -a -m "Fixup to file.txt"
$ git rebase -i HEAD~2
... the last commit is "fixup'ed" to the last commit in the original branch (the commit before "Fixup to the file.txt" commit
# Push the B with rewritten history to the upstream
$ git push --force origin B
# Get back to the original repo and pull the changes
$ cd ../dir1
$ git pull origin B
...
CONFLICT (content): Merge conflict in .../file.txt
...
分支的两个副本之间的唯一区别在于" top"承诺。 是否有可能告诉git,我想用第一个repo中的最后一次提交替换我在上游的内容而没有git-pull试图查看相应文件中的更改?
答案 0 :(得分:0)
有像
这样的历史...-A-B-C-D-E # HEAD
其中E
是dir/
中未更改的提交。我们将E'
作为一个来自E
的提交,但是从dir2
进行了重新定位和强制推送。
在dir
中,您可以将HEAD
倒回到之前的提交中:
git reset --hard HEAD^
获取
...-A-B-C-D # HEAD
\
`-E # dangling and invisible, will be garbage collected
之后
git pull upstream B
会给你什么
...-A-B-C-D-E' # HEAD
\
`-E # dangling and invisible, will be garbage collected
但请注意,您将丢失E
的内容(除非您在reflog
中搜索