我通常使用,git pull --rebase如果我直接在master上工作(我尽量不做).如果我忘了做一个rebase并且刚刚做了git pull,有没有办法撤消它并使其成为线性,而不是合并?在这一点上做一个坏事是个坏主意(如果这甚至可以完成任何事情)?
我知道默认情况下我可以在启用时启用rebase,所以我不会忘记,但这更像是一个理解在这种情况下要做什么的问题.
tor*_*rek 14
简短回答(已由@Alex在评论中给出):git reset --hard HEAD^但是,只有在合并提交时(否则您只是从快进中备份一个提交).
长版说明:
git pull实际上只是git fetch跟着git merge(除非你覆盖--rebase,如你所说).所以你只需要看看你是否有一个实际的合并提交:
$ git pull
Updating 171ce6f..523bacb
Fast-forward
mp.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
create mode 100644 mp.py
Run Code Online (Sandbox Code Playgroud)
在这种情况下,没有合并提交,只是一个快进,所以,没有问题 - rebase没有变化!如果你这样做,git log你会看到缺少合并提交,特别是如果你做下面的图形y.
让我们强制合并.
$ git reset --hard HEAD^
HEAD is now at 171ce6f ignore *.log files
Run Code Online (Sandbox Code Playgroud)
[现在我落后了remotes/origin/master]
$ echo '# pointless comment' >> selfref.py
$ git add selfref.py
$ git commit -m 'added to force merge'
[master 260e129] added to force merge
1 files changed, 1 insertions(+), 0 deletions(-)
$ git pull
Merge made by recursive.
mp.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
create mode 100644 mp.py
Run Code Online (Sandbox Code Playgroud)
我们可以看到,即使上面的文字丢失,也会发生这种情况:
$ git log --graph --decorate --abbrev-commit --pretty=oneline
* c261bad (HEAD, master) Merge branch 'master' of [ssh url]
|\
| * 523bacb (origin/master, origin/HEAD) add multiprocessing example
* | 260e129 added to force merge
|/
* 171ce6f ignore *.log files
Run Code Online (Sandbox Code Playgroud)
我们想让本地分支名称master再次指向(在本例中)260e129.幸运的是,这很容易命名:
$ git rev-parse HEAD^
260e1297900b903404c32f3706b0e3139c043ce0
Run Code Online (Sandbox Code Playgroud)
(当前的双父,合并提交的另一个父是HEAD^2.)所以:
$ git reset --hard HEAD^
HEAD is now at 260e129 added to force merge
Run Code Online (Sandbox Code Playgroud)
现在我们可以重新加入remotes/origin/master(我将使用真正的短名称origin,来命名):
$ git rebase origin
First, rewinding head to replay your work on top of it...
Applying: added to force merge
Run Code Online (Sandbox Code Playgroud)
现在,graph-y单行日志显示:
$ git log --graph --decorate --abbrev-commit --pretty=oneline
* 4a0b2e2 (HEAD, master) added to force merge
* 523bacb (origin/master, origin/HEAD) add multiprocessing example
* 171ce6f ignore *.log files
Run Code Online (Sandbox Code Playgroud)
从这一切开始,您应该能够弄清楚如果您运行git pull该怎么做并抱怨合并失败.:-)
| 归档时间: |
|
| 查看次数: |
5379 次 |
| 最近记录: |