工作中遇到的Git问题

场景1

问题:有一个仓库feature,需要用到另外一个仓库base作为基础然后去定制开发,但是又想保留住base的commit信息

首先要把base给clone下来,此时输入git remote -v,会出现:

origin  git@github.com:FuShaoLei/base.git (fetch)
origin  git@github.com:FuShaoLei/base.git (push)

origin是这个远程仓库的别名

后面带fetch指的就是git fetch时的地址,那么git fetchgit pull有什么区别呢

  • git fetch 命令用于从远程仓库获取最新的提交和分支信息,但不会自动合并或修改你当前的工作区。它会将远程仓库的最新状态下载到你本地,使你能够查看和比较远程分支与本地分支之间的差异(可以使用git diff命令)。
  • git pull命令,实际上是git fetchgit merge(默认的合并策略是递归)的结合

后面带push指的就是git push时的地址

好,现在言归正传

首先删除本地的origin分支(我总感觉不删除也行)

git remote remove origin

然后添加远端的仓库

git remote add origin git@github.com:FuShaoLei/feature.git

这时候输入git remote -v就可以看到和之前不一样

然后就可以push 上去了

git push --set-upstream origin master

场景2

问题:有一个仓库feature,需要用到另外一个仓库base作为基础然后去定制开发,我通过之前的方法做到,使得feature和base有着相同的commit信息,但随着时间的推移,我的feature做了一些定制开发,我的base也修复了一些bug什么,这时候,我想将base上的修改,移动到feature仓库来,该如何做呢

首先添加远端仓库base

git remote add base git@github.com:FuShaoLei/base.git

这时输入git remote -v就可以看到如下指令

base    git@github.com:FuShaoLei/base.git (fetch)
base    git@github.com:FuShaoLei/base.git (push)
origin  git@github.com:FuShaoLei/feature.git (fetch)
origin  git@github.com:FuShaoLei/feature.git (push)

然后拉去base的最新代码:

git fetch base

合并进去

git merge base/master

发生冲突后,使用我们的修改:

git checkout --ours <filename> // 指定某个文件
git checkout --ours . // 或者全部文件

或者使用base/master的修改

git checkout --theirs <filename> // 指定某个文件
git checkout --theirs . // 或者全部文件

然后continue

git merge --continue

然后push就好了