小白问git的问题,求解答

刚刚接触GIT,看了廖雪峰的GIT教程感觉茅塞顿开。不过还一些问题想问下?

需求:

需要定期从github上更新一个开源项目(PHP)代码,只要这个开源项目的作者提交了项目更新。我可能就需要更新到我本地项目中来,不过这个项目作者每月基本才会更新一次,频率不会太高。我自己每天都会在本地项目中开发我自己的需求,这些新开发的需求只是我自己使用,不需要再次上传到这个开源项目中去。也不需要在本地和其他人共同开发项目!

疑问:
第一次git clone这个项目后,然后每月去GITHUB上看看作者有无提交新的更新,如果有就更新下来。我在本地开发新需求时是不是只要及时把这些新修改commit到本地master分支中,如果GIThub上有更新,我就git pull到本地master分支中与我自己提交的修改合并,并解决两者代码冲突问题即可?这样的流程是不是正确的?因为我看到了分支功能,在想是不是在每次git pull后,本地再建立一个开发分支,然后在分支上开发,开发完了再继续合并到本地master主分支上去。好像两种思路都是差不多?

如果是这样的流程,我是不是只要会git的一些简单操作即可?如文件合并、冲突解决、代码回滚,还要了解GIT的那些知识?感觉GIT的水太深了

阅读 2.1k
3 个回答

你可以先按自己的操作来就行了,毕竟刚接触,慢慢再了解更多。

正确姿势应该是fork到你自己的github,你自己开发的内容可以全部推到这个仓库,不影响他开源的仓库,然后你可以在不同电脑上开发,而不局限于一台电脑(这样也更安全,大大降低代码丢失的风险)。
你的本地仓库可以关联两个远程仓库,默认关联一个是origin,就是你clone的远程仓库(如果你直接clone别人的,那就是别人项目的地址),你需要再关联自己的仓库就可以了。
具体步骤:
1.他的开源项目上fork项目到你自己的github。
2.如果没有clone到本地,就clone自己的项目到本地,并添加两个远程。
添加远程仓库的指令为:

git remote add source '开源仓库地址'。

这样添加的远程仓库名就是source而不是origin。

这里可以把你自己的仓库设为origin(习惯远程就是这个名字),而他的仓库叫别的名字,比如就叫source,那完整的指令:

git remote delete origin // 删除远程关联,如果是clone自己的可以不用这步
git remote add origin '你自己的项目地址' // 如果是clone自己的上一条指令没执行 这一条也不用执行
git remote add source '他的远程地址'

3.开发步骤
正常开发commit到本地后,推到自己的仓库。

git push -u origin master // 第一次 之后就git push

当你需要合并原作者的开发内容时,

git pull source master

自己开一个分支吧,既然你有自己的提交
假如你当前在自己的分支上
更新:git pull origin master:master
然后你再git merge master
解决冲突,就可以了

先说说普通开发所需要的GIT操作吧,一般情况下只需要了解clone远程仓库、拉取远程仓库代码、合并代码到本地仓库、提交commit到本地仓库、推送到远程仓库这个流程中所需要的操作。
经常会使用到如下操作:

  • clone远程仓库到本地:clone
  • 拉取远程仓库和合并代码到本地仓库:fetch/mergepull
  • 提交记录到本地仓库:commit
  • 推送代码到远程:push
  • 暂存修改:stash
  • 分支管理:branch
  • 远程仓库管理:remote
  • 重置HEAD:reset
  • 查看历史记录:log

这些操作里有的还会有再细分的命令,普通的开发至少要把以上命令的具体使用了解清楚。

需求:按照题主的使用目的来看,应该只是fork了别人的库,然后自己开发着用,顶多推送到自己的远程仓库里去。如果只是这种情况:
一、不需要跑去原作者仓库里看有没有更新,你在本地直接用命令拉取原作者远程仓库的代码,显示Already up-to-date就说明没有更新,不然会告知你有冲突或者说你的代码还没提交commit会有被覆盖的风险。而且你还可以拉取任意分支的代码到本地;
二、关于分支,如果你确定你需要原仓库的每次更新都要体现在你的本地中,是没有必要去建立新分支的,因为只有你自己用,你最终还是要合回主分支,增加了复杂度;
三、这个对于你来说的主分支并不一定非要是master,你也可以保留原仓库分支不变,只在一个你新建立的分支上开发功能、拉取新代码,也不需要最终合并回master,除非你必须要使用master分支。

需要建立分支的情况是,你在主分支正常使用之外要开发新的功能或者同时有多个不同功能在并行开发,为了不互相影响,在主分支基础上各建立新的分支开发,这样如果你在开发中想要舍弃其中一个功能,直接删掉分支就可以,它不会对其他功能产生影响,有点模块化的意思。与别人合作也是同样的道理,最终都是要保证主分支正常运行功能不受影响,然后在其他分支上开发新功能,测试成功后才合并回主分支,发布一个新的版本。

最后说一点,工具是为人服务的,应该灵活的采用最简单的方式适合自己的需求。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题