git操作&&如何提出你的第一个PR

        距离我提出我的第一个PR,已经过去一个月了,虽然也有许多类似的文章,但是我还是想做一个自己的总结。

        提PR是一个程序员必备的技能,曾经,我以为只有参与开源项目的人需要这项技能。直到我进入公司,才知道,GitHub不仅有开源项目,它还有私人仓库啊!所以公司的商业项目也可以放在GitHub上,使用Git进行严格的版本控制。

         好了,废话不多说,我要开始总结了!

          1、首先,将你要修改的项目fock到自己的github仓库。

          2、打开你的IDE,使用git clone http://github.com/xxx/project.git命令将项目克隆到本地。

          3、使用git checkout -b #1000命令,新建一个名为#1000的分支,并切换到这个分支下。#1000的名字一般是对应这个分           支要解决的问题的,比如JIRA上的issue号。

           4、现在已经位于#1000分支下了,就可以放心开展工作了。因为你所有的修改都会只在这个分支下,不会影响到其他的分     支。首先要明白git的工作区和暂存区概念,工作区就是你本地当前的修改,对于工作区的修改,使用git add命令可以将其添加到暂存区,添加到暂存区以后,你再在工作区修改这个文件就不会影响暂存区的内容,当然,你也可以再次使用git add命令将工作区第二次的修改再次添加到暂存区。git add .是将所有工作区文件都添加到暂存区,git add filename是将指定文件filename添加到暂存区。git status可以查看工作区和暂存区文件状态。

            5、把所有准备提交的修改都添加到暂存区以后,就可以使用commit命令了。git commit -m ‘massage’会将当前暂存区的文件提交到本地仓库,其中message的内容需要提供这个commit的信息。这个操作之后就可以在日志记录里面看到你的commit了,git log可以查看日志记录。当然,IDE也有log的可视化记录。

             7、确认commit无误,使用git push命令将当前分支推送到自己的远程仓库,因为本地仓库与自己clone的仓库之间是追踪关系的,git push会默认推送到自己的远程仓库。但是如果分支只是在本地建立的,远程仓库不存在这个分支,那么就需要使用git push --set-upstream origin #1000,这样会在远程仓库建立#1000分支,并将其与本地#1000分支关联,将本地#1000分支的commit push到远程。下次如果还是在这个分支做什么改动需要提交commit,就可以直接使用git push进行推送。

              8、推送到远程仓库以后,就可以登录自己的github查看,在对应分支下面会有commit提醒,你可以选择创建PR,将自己仓库的分支提交到被fock仓库的master分支,一般都是提交到master分支的。如果PR review通过了,你的PR就会被merge到master分支,你就成为这个项目的contributor啦!

              9、以上步骤,是不是看起来很简单?但是!作为一个新手,怎么可能每一步都如此顺利。不想要工作区发生的修改了怎么办?想丢弃暂存区的修改怎么办?commit提交了想撤回怎么办?commit不但提交了还push到了远程仓库又想撤回怎么办?放心,只要PR没有发出去,你所有的操作都可以被撤回。

9.1 撤回工作区修改。

       git checkout -- filename

9.2 撤回暂存区修改。

       git reset filename,这个命令可以将暂存区文件撤回到工作区,之后再按照工作区的操作撤回就好了。

9.3 撤回本地commit。

       git reset --soft HEAD^,这个命令的意思是回退到当前版本的上一个版本,如果想多回退一个版本,可以使用git reset --soft HEAD^^,就是一个^代表一个版本,两个^就代表两个版本。其中--soft的参数是代表本地修改不会撤销,如果使用--hard就会将本地修改一并撤销,慎用hard。

9.4 撤回已经push到远程仓库的commit。

      这个操作其实是靠强制推送本地版本来实现的,所有强制操作都是有风险的,所以一般情况下不建议使用,但是如果你能确保安全的话,还是可以用一用的。

      首先回退本地版本,使用9.3的命令,比如需要撤回最新的一个commit,那么就先回退本地上一个版本git reset --soft HEAD^,然后强制将当前版本推送到远程仓库git push --force。这样远程仓库就也回退到上一个版本了。

       这个操作危险在哪里呢?在一个多人协作的项目里,如果在你强制推送上一个版本到远程的时候,恰好有另一个人向远程仓库提交了一个commit,你的版本就会覆盖他的commit,就相当于别人的commit没有提交上去,但是不仔细检查的话,这个错误就可能没有人发现,说不定一直隐藏到版本发布。。。不过呢,如果你确定要强推的分支只有你一个人使用,这个操作就应该没有什么问题。

             10、好啦,大概总结完了,当然git的命令很丰富,许多问题肯定没有覆盖到,如果遇到了什么无法解决的问题,还是要求助万能的百度。

              20190813更新

              11、如何更新远程分支代码到本地:实际开发中可能会遇到很多这样的情况,远程仓库分支代码更新到了一个新的版本,本地还停留在之前。这时候需要将远程的拉取到本地,又不影响本地的修改。许多人可能会想到用git merge,其实有一个更好用的命令可以代替git merge,它就是git rebase。

              首先,将本地分支的所有修改暂存起来:git stash;然后拉取远程仓库最新代码,git fetch origin,其中origin应该是你想要拉取更新的仓库的名字;然后使用git rebase origin/master来将远程仓库更新到本地,其中master应该是你想要更新的分支名字。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值