fast-forward和no-fast-forward兩種模式只會在merge的時候出現。
fast-forward出現的兩種情況
1. git push 和 git pull 遠程分支與本地分支合並
2. git merge branch 本地兩個分支進行合並
fast-forward
merge之后不會出現新的commit對象,分支的合並線是一條直線,被合並的分支,沒有分叉,會丟失,再看不到該分支歷史。
no-fast-forward
merge之后會出現一個merge commit對象,分支的合並線在主干外出現一條分叉,叉出去,又叉回來,在merge節點處合並為主干。
git push出現reject的情況
本地的最后commit與遠端的不一致,導致無法對接,reject。
對於已經push的commit,如果在本地再次修改,例如 git commit --amend或者git rebase -i修改,則push的時候會出現reject。
遠程的commit在本地已經沒有了,沖突了,如果沒人拉取此commit,則可以git push -f,強制刪除無用的commit,但沒人拉取不可知。
所以,已經push的commit,只能用revert來修改commit,即新提交一條commit。
參考:
https://www.jianshu.com/p/86c44bef4ea1
https://blog.csdn.net/lzb348110175/article/details/93479318