Git fast forward提交

多人协同开发,使用Git经常会看到警告信息包含术语:fast forward, 这是何义?

简单来说就是提交到远程中心仓库的代码必须是按照时间顺序的。

比如A从中心仓库拿到代码后,对文件f进行了修改。然后push到中心仓库。

B在A之前就拿到了中心仓库的代码,在A push成功之后也对f文件进行了修改。这个时候B也运行push命令推送代码。

会收到一个类似下面的信息:

[plain]  view plain  copy
  1. chenshu@sloop2:~/work/189/appengine$ git push  
  2. To ssh://csfreebird@10.112.18.189:29418/appengine.git  
  3.  ! [rejected]        master -> master (non-fast-forward)  
  4. error: failed to push some refs to 'ssh://csfreebird@10.112.18.189:29418/appengine.git'  
  5. To prevent you from losing history, non-fast-forward updates were rejected  
  6. Merge the remote changes (e.g. 'git pull') before pushing again.  See the  
  7. 'Note about fast-forwards' section of 'git push --help' for details.  

提醒你非快进方式的更新被拒绝了,需要先从中心仓库pull到最新版本,merge后再push.


fast forward能够保证不会强制覆盖别人的代码,确保了多人协同开发。尽量不要使用non fast forward方法提交代码。

当在Git中尝试将一个分支合并到另一个分支时,如果目标分支包含了源分支的所有历史记录并且向前推进(即不是简单地追加一个新的提交),就会出现“非快进”错误(Non-fast-forward merge)。这种情况下,Git不会自动合并,因为这可能导致提交顺序混乱或丢失历史信息。 具体场景通常是这样的: - 你在`branch-a`上做了若干次提交,然后想把`branch-a`的更改合并到`branch-b`。 - 而此时`branch-b`已经有了`branch-a`之后的新提交。 - 当你运行`git merge branch-a`时,Git会提示错误,因为它无法简单地将`branch-a`的内容追加到`branch-b`的最新提交后面,而是需要创建一个新的合并提交。 解决这个错误的步骤如下: 1. **手动交互式合并**(Interactive Rebase):如果你愿意看到合并过程并可能需要编辑某些合并信息,可以使用`git rebase -i branch-a`,然后选择`pick`、`reword`或`edit`等选项来调整提交顺序或添加注释。 2. **创建新的分支再合并**:如果不想混淆历史,可以先在`branch-a`基础上创建一个新的分支,如`new-branch`, 再将`branch-a`的内容合并到`new-branch`,最后再将`new-branch`合并到`branch-b`。 3. **忽略错误继续合并**:如果不需要保留完整的合并历史,可以直接忽略错误并强制合并,但请注意这可能会导致历史不可追溯,使用前需谨慎: ``` git merge --no-ff branch-a ``` 这样做的后果就是生成了一个普通的提交,而不是标准的快进合并。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值