多人开发协作,Git最佳实践与常见问题解决方案

常用命令

git add 
git commit 
git push

Git合并冲突了,怎么办?

什么时候产生冲突

当我们有两个人分别用 f1 和 f2 两个分支开发代码时,不小心都改到同一行,这时候两个人并没有意识到,当他们开发完成后,就会将修改的代码通过add、 commit 以及最终push到远程repo去请求合并。这个时候,远程repo发现同一行代码有不同修改,不知道要合并哪一个,这时就产生冲突了。

git冲突产生时间

怎么解决冲突?

这时候肯定需要有一个人(或者说有一个分支)做出让步,要么合并 f1 冲突的行,要么合并 f2 冲突的行。
假设 f1 要做出让步比较厉害,对git玩得很溜,这时候他提出要来解决这个冲突,于是他告诉我们,他是按照下面的原理来解决的:

  1. f1 这个人在本地切换到主分支:git checkout master
  2. 它将本地的master和远程的master做了同步:git pull origin master
  3. 此时切换会 f1 分支:git checkout f1
  4. 使用rebase将f1 变基到 master : git rebase master
  5. 这个时候git可能会提示它有冲突,需要解决,于是他就到冲突的那个文件中,将想要保留的代码留着,其它的删除,这样就解决了冲突。
  6. 于是添加修改信息:git add .
  7. 继续变基 : git rebase --continue
  8. 如果这个时候还有冲突,那就按照 5- 7 的步骤解决,知道冲突解决。
  9. 最后,通过一个提交:git commit -m ‘resolve confilct’
    10.然后,强推一把代码到远程:git push -f

就这样, 它完成了冲突的解决。

git pull 和 git fetch & git merge

在上面解决冲突,有一个步骤是git pull,他的作用可以理解为将本地代码和远程代码同步。
git pull 主要做两个事情:1. 拉取远程代码到本地(git fetch --all) 2. 合并本地代码和远程的差异(git merge origin master)
因此,可以简单地理解git pull 约等于 git fetch + git merge,更具体的原理,给大家推荐一个视频:
GIt Fetch+Git merge 和 Git Pull 的区别

最佳实践

假设要开发一个新功能,那么可以按照下面的方法实践;

  1. 切换到master,拉取最新代码
git checkout master
git pull origin master
  1. 创建一个新分支,并基于这个分支提交代码
git checkout -b feature/name
  1. 添加、提交、推送代码
git add .
git commit -m 'comment'
git push
  1. 将指定分支推到远程。

如果忘记切换新分支,直接在master开发了,怎么办?

假设现在要开发一个新功能,但是我忘记切换新分支,一直在master开发,直到要合并了才知道。这个时候,可以采用下面的方法

  1. 先将master这些修改提交,但是不要推送
git add .
git commit -m 'commit'
  1. 切换会修改前的那个分支
查看修改前的分支 : git reflog

在这里插入图片描述

  1. 如图,上次的版本号为标红框的地方,于是回退到这个版本,并且在这个版本新建分支
git reset --hard b766811
  1. 在这个版本新建分支
git checkouot -b f2
  1. 将 f2 分支切换到之前在master修改的那个版本,与是 f2 就指向了那个原本在mster修改的版本,此时效果类似与在 f2上修改代码
    在这里插入图片描述
git reset --hard a6e382a
  1. 按照之前的方法,推送到远程。

克隆远程指定分支

git clone -b <指定分支名> <远程仓库地址>

git 中 fetch 和 pull怎么用

其实git pull 相当于 fetch + merge 或者 fetch + rebase, 也就是fetch只是把远程代码拉取到本地,但是不做任何操作,如果要进行本地代码和远程代码同步,则再需要使用merge或者rebase。
因此, 其实,使用fetch相对安全,因为使用pull会自动帮你把本地仓库和远处仓库同步,这个操作是git帮你做的,容易出现错误,比如你的本地代码丢失等等。

一般可以这样操作:
git fetch --all
git rebase origin master

参考

Git Rebase 与解决冲突
GIt Fetch+Git merge 和 Git Pull 的区别
git中pull和fetch的区别是什么
git解决合并冲突

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值