本教程适用于以下产品:
一、前提
1、下载并安装好 PhpStorm
2、下载并安装好 Git
3、熟悉 Git 相关命令行操作
二、Git pull & commit(add)
下面简单说一下相关操作:
PhpStorm 打开一个 Git 的项目
右上角就会有类似的两个按钮
新版的界面是这个
左边这个就是拉代码的,命令行是:Git pull
右边这个是Commit的,命令行是:add 和 Commit
提交代码快捷键:Ctrl + Shift + K ,命令行是:Git Push
与 SVN 不同的是,Git commit 后还需要 push 代码才会真正被提交到 Git 仓库
三、切换版本分支以及代码合并
切换版本分支命令行:Git checkout
选择你要切换的分支,直接 Checkout 即可,若是本地没有的分支,在远程分支列表中选择 Checkout As ,输入名称即可,如下图:
分支合并命令行:Git merge
比如我想把本地的分支 A 合并到分支 B 里面,首先先确保你本地的 B分支 的代码是“最新的”
即:切换到 B分支,更新代码,选中 A分支,鼠标左击,选中 Merge into Current ( PS:旧版本可能是 Merge )
(这里也可以进行远程分支合并,即在 Remote Branches 里面,选择想要合并的分支,选择 Merge into Current 进行合并)
点中这个进行合并,合并后 Push 到 Git 仓库即可
四、回滚
下面关于 Commit 之后反悔的操作,我 Commit 了一些修改,但是我突然不想要了,右下角切换到 Log,看你的 Commit,不想要的直接右键选择 Revert,可以直接撤销刚刚的 Commit(这个只能撤销自己的 Commit)
Revert Current Branch to Here 可以直接撤销前面的所有 Commit,包括别人已经 Push 的修改也可以撤销,撤销之后,代码会回到 Commit 之前的状态,即文件是蓝色或绿色或红色那种
选择 Reset Current Branch to Here ,还可将代码回滚到指定的地方,点了之后有四个选项可以选,根据实际情况选一个就行,默认就选 Mixed 如图:
然后 Force Push 就可以实现代码的回滚,注意一定要强制Push,不然代码是推不上去的,如图:
注意:master分支在 PhpStorm 里面好像不能强制push(默认是保护的分支),可以直接用命令行
$ git push -u origin master -f
或者修改配置(直接删掉就行):
注意:上面两种方式都会影响当前分支,即会丢失代码提交记录等,若不想用 revert 或者 reset 的话,参考下面目录第“十一”,Check Revision 创建新的分支
五、新建分支
Git 新建分支,右下角直接切换到你想要复制的分支上,保证代码是最新的情况下,点击 New Branches,输入名字即可
比如:我想要复制 A 分支,并命名为 B 分支,首先我先切换到 A 分支上,然后 New Branch 创建一个新分支,并命名为 B,接着把 B Push 即可
六、Stash / Unstash
Stash:把当前项目所修改的地方暂存到本地
Unstash:恢复上次暂存的文件
比如现在我有个 Bug,想切换到其他分支修改这个 Bug,但是呢,我当前开发的分支已经修改了一些东西,而我又不想提交,
这个时候可以用 stash 暂存一下你的代码,然后切换到其他分支修改完 Bug 后再切回开发的分支,执行 unstash 就可以恢复到当时修改的文件
流程如下图:
1、暂存
2、恢复,选中当时暂存的版本,点击 apply 恢复即可
七、Cherry-Pick
假设我在 A 分支有一个提交记录,由于改动的地方比较多,我想单独把这条已经在 A 分支 push 过的提交记录在 B 分支也加上去(我不想直接合并两个分支)
这种情况的话,直接使用 Cherry-Pick ,对应命令
git cherry-pick <commit id>
下面说下操作:
先切换到 B 分支,打开 Git 提交记录,在Branch 选择 A 分支,然后找到你提交的那条记录(如上图),右键,选择 Cherry-Pick(如下图),然后 commit 跟 push,完毕,这样就把 A 分支的某条提交记录单独的“合并”到 B 分支。
八、Annotate
下面说一下黑科技,Annotate,甩锅神器
打开文件,在左边显示行数的地方右键,选择Annotate
选择之后左边行号那里会多出一些神秘的东西,选择其中的一个即可查看你当前文件对应的某一行代码上一次的修改情况,甩锅跟排查 BUG 必备
如果你某一天,线上的某个功能有人偷偷改了,未经过测试就出现问题,用这个可以快速看出是谁捅的篓子,尽快修复安排上线。
九、Tag
创建 tag:
打开 Version Control -> log,选择某条提交记录,右键,选择 New Tag,可以对某一条提交记录打上 Tag 标签,如下图
或者
PS:创建完标签后记得把 tag 推送到 Git 服务器!
如何推送呢?如下图:
选择 All:即推送所有 tag
选择 Current Branch:推送当前分支的 tag
命令行是:
$ git push origin [tagname] #推送单个tag
$ git push [origin] --tags #推送所有tag
打上标签可以在部署代码的时候,选择部署到标签指向位置的代码,标签后面的所有提交记录都不会部署,以 Jenkins 为例
这样的话,部署代码到服务器只会部署标签所在位置之前的代码,标签后面的提交记录不会被部署,打上标签可以快速回滚系统版本
删除 tag:
找到你创建的 tag,右键删除
注意右下角,Restore是还原,Delete on Remote是把 Git 服务器上的标签删除
命令行:
$ git tag -d tagname //本地删除tag $ git push origin :refs/tags/tagname //本地tag删除了,再执行该句,删除线上tag
十、查看文件修改历史
打开你想要查看的文件,在顶部文件的 tab 处右键;也可以直接在左侧的文件列表右键,效果一样, Git -> Show History 如下图:
点击 Show History 后会打开一个新的面板,里面会展示当前文件所有的提交历史,双击某条提交历史可以查看这条提交记录所修改的地方
十一、Checkout Revision
版本回退或者想从某个提交记录开始创建新的分支,打开 Git Log 窗口,选择某条提交记录,假设为 001,右键,选择 Checkout Revision ,这个时候会创建一个新的临时分支,这个分支会保留提交记录 001(包括001)之前的所有提交记录,即保留提交记录 001 之前的所有代码,注意,这个时候这个分支是临时的分支,任何 git pull 和 git push 都不会生效,点击右下角的 git,选择 New branch,输入名称后创建一个新的分支,这个新创建的分支保留有 001 之前的所有代码,然后我们再把这个分支的代码推送到服务器,这个时候新的分支就创建好了,这个分支保留有 001 之前的所有代码,这样创建新的分支的方式即不用回滚丢弃不要的提交,也不会对其他版本造成任何影响,又避免误使用 reset 或者 revert 对代码造成不可恢复的影响,这样做无非就多了一个新的分支而已,如下图:
选择后创建的临时分支
以当前的代码创建新的分支,然后推送到远程服务器即可
十二、删除版本
删除本地分支或者删除远程分支,右下角选择 git,选择想要删除的分支,鼠标左击,选择 Delete