我遇到的情况:新创建了一个项目,用优盘拷贝的源代码,后来其他人的代码进行git push,我需要pull 下来。

1,需要本地仓库,并git commit

2,此时git pull会报错:fatal: refusing to merge unrelated histories.  

     解决办法:git pull origin master --allow-unrelated-histories

     注意:master是我需要pull的分支,根据自己需求

     错误的解释:

* "git merge" used to allow merging two branches that have no common base by default, which led to a brand new history of an existing project created and then get pulled by an unsuspecting maintainer, which allowed an unnecessary parallel history merged into the existing project.  The command has been taught not to allow this by default, with an escape hatch "--allow-unrelated-histories" option to be used in a rare event that merges histories of two projects that started their lives independently.
 * "git pull" has been taught to pass the "--allow-unrelated-histories" option to underlying "git merge".

    避免这种错误的方法:不要用优盘或其他的方式拷贝源代码,需要一个人创建好项目后push到github或码云,然后通过fetch     或clone的方式


      

下面推荐一个写的挺好的merge branch  ,原文链接:https://www.cnblogs.com/forwill/p/6524185.html

Git的优势是可以创建不同的branch,然后在每个branch上开发。那么问题是:如果不同的branch之间需要做同步,比如sourceBranch上做的修改也需要同步到targetBranch,改怎么做?

1. 如果一个branch是有远程Git server管理的,另一个branch是自己本地的

    cd <your workspace>

    git branch  //假定现在所在的branch是targetBranch,并最好保证没有未提交的修改,并且已经更新到最新

    git checkout -b sourceBranch  //创建一个本地的sourceBranch并切换到sourceBranch

    git commit  //把sourceBranch上做的修改先提交

    git checkout targetBranch  //切换回targetBranch

    git merge --no-ff sourceBranch  //把sourceBranch的修改merge到targetBranch。注意:建议merge的时候总是用 --no-ff 选项

    git status  //保证现在workspace是干净的

    git push   //push到远程,如果远程有新的修改,先做一下git pull

 

2. 如果两个branch都是远程管理的,想把branchB的内容同步到branchA上

   cd <your workspace>

   git branch  //假定现在所在的branch是branchA,并最好保证没有未提交的修改,并且已经更新到最新

   git checkout sourceBranch  //确保同一个workspace能在不同的branch直接切换,即保证 .git/config里 [remote "origin"] 的内容是 fetch = +refs/heads/*:refs/remotes/origin/*

   git merge targetBranch

   解决conflicts如果merge的结果里有显示conflicts

   git commit  //解决冲突后先commit到sourceBranch

   git checkout targetBranch  //切换到targetBranch

   git merge --no-ff sourceBranch  //建议merge的时候总是用 --no-ff 选项

   git push origin targetBranch   //把sourceBranch的修改merge到targetBranch之后,push到远程的targetBranch

  
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐