工作中遇到的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 fetch
和git pull
有什么区别呢
git fetch
命令用于从远程仓库获取最新的提交和分支信息,但不会自动合并或修改你当前的工作区。它会将远程仓库的最新状态下载到你本地,使你能够查看和比较远程分支与本地分支之间的差异(可以使用git diff
命令)。git pull
命令,实际上是git fetch
和git 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就好了
评论