新建一个站点文件夹: myweb;
安装git 完成后,设置账号,在命令行输入:
git config –global user.name “php7”
git config –global user.email “php7@php.net”
执行命令初始化:git init; 将myweb文件夹变成git管理的目录。
//现在开始拉取项目代码:
git clone https://github.com/php7/phpdev.git
这样就把项目代码克隆到myweb文件夹中了。
现在开始开发:
添加或修改一个文件: index.php
功能开发完毕开始上传:
git add index.php
git commit -m “修改index.php”
git push 提交新修改的文件到代码库。
提交完成后可以使用 git log 查看提交记录
命名行 输入 q 退出
输入 命令: git log -p 查看具体代码修改情况
注意: -红色的代码是你刚刚删除的代码;+绿色的代码是你刚刚添加的代码。
查看当前的提交情况:git status 看看添加了哪些文件,删除了哪些文件,改动了哪些文件
假如你在开发中,修改了a.php文件,过了一会想看看你刚刚改动了哪些地方,则使用命令: git diff a.php 就可以查看具体更改的代码;
比如你在开发中修改了好几次,提价了好几次代码,可以使用命令: git log 查看你提交的记录;git log命令显示从最近到最远的显示日志,我们可以看到最近三次提交。
也可以使用命令: git log – -pretty=oneline 查看,这样是吧每次提交的记录号以一行一行的显示出来。
如下:
$ git log –pretty=oneline
1cffe5fbae504c968cd0486c851c7e761385cbdc 修改index.php登录地址
29eb0a1c1f353201b1b50f261d0daa 添加a.php文件
445527bfad7c8c0e34bc8b19489e5 修改index.php注册功能
我想把当前的版本回退到上一个版本,要使用什么命令呢?
可以使用如下2种命令,第一种是:git reset – -hard HEAD^ 那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset – –hard HEAD~100 即可。
注意:这只是将本地的版本进行了回退。但是远程的版本库里面的内容仍然是最新的版本。
如果想将本地的版本更新到最新的版本,执行命令:git pull 即可。相当于再从远程拉取了最新的代码。
或者:使用命令 git reflog 查看每次更改的内容的版本:如下所示:
$ git reflog
1cffe5f HEAD@{0}: pull: Fast-forward
29eb0a1 HEAD@{1}: reset: moving to head^
1cffe5f HEAD@{2}: commit: 第二次修改index.php
29eb0a1 HEAD@{3}: commit: 添加a.php文件
git reset – -hard 1cffe5f 即可恢复到最新的版本,1cffe5f版本号
工作区:就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。
版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。
一:撤销修改:
比如我现在在 index.php 文件里面增加一行 内容为 echo “66666”; ,
在我未提交之前,我不想添加这段代码,(尚未执行git add index.php ; git commit … )如果想恢复以前的版本,可以通过下面下几种方法修改:
第一:如果我知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后add添加到暂存区,最后commit掉。
第二:我可以按以前的方法直接恢复到上一个版本。使用 git reset -–hard HEAD^
第三:直接执行:git checkout – – index.php 就可以了。可以撤销刚才你对index.php 的代码修改。
$ git checkout – – index.php
注意:命令git checkout – – index.php 中的 — 很重要,如果没有 – – 的话,那么命令变成创建分支了。
但是如果你在修改了index.php 文件在中添加 内容 echo “66666”; 并且执行了 git add index.php ; git commit -m “添加666”;命令后、在执行git push之前,又不想修改index.php了,
这个时候可以执行命令:
$ git reflog
6e64ddd HEAD@{0}: commit: 添加666
1bec9be HEAD@{1}: commit: 第三次修改index.php (这个是你需要恢复的版本号,也就是你未修改之前的版本)
1cffe5f HEAD@{2}: pull: Fast-forward
然后执行:
$ git reset –hard 1bec9be
HEAD is now at 1bec9be 第三次修改index.php
此时你就把本地的代码恢复到 上一个版本了,(就是你没有修改之前的版本,也就是撤销了刚才的修改!)
注意:完成撤销,同时将代码恢复到前一commit_id 对应的版本
删除文件:
你在开发中添加并上传了一个b.php 并且更新提交了git。此时想删除b.php 。执行以下步骤:
1、 在本地直接删除b.php
2、执行命令:$ git rm b.php
rm ‘b.php’ 可以使用 git status查看当前的状态
3、执行命令 git commit -m “删除b.php”
4、执行命令: git push 即可。
此时远程代码库,里面的b.php 已经被你删除了。
分支:
创建并切换分支:
首先,我们来创建dev分支,然后切换到dev分支上。如下操作
$ git checkout -b dev
Switched to a new branch ‘dev’
git checkout 命令加上 –b参数表示创建并切换,相当于如下2条命令
git branch dev 查看所有分支
git checkout dev 切换到dev分支
git branch查看分支,会列出所有的分支,当前分支前面会添加一个星号
现在你在dev分支中,添加一个dev.php ;执行
git add dev.php
git commit -m “dev分支上添加dev.php”
git push origin dev
$ git push origin dev 此时 远程git代码库上多出来一个dev分支。
现在dev分支工作已完成,
现在我们切换到主分支master上,
$ git checkout master
Switched to branch ‘master’
继续查看dev.php内容,执行命令: ll -a ;发现在master分支下,并不显示dev.php 。因为刚刚的dev.php 添加到了dev的分支上。
现在在master分支上可以 合并dev 分支,可以把dev分支上的内容合并到分支master上了,
使用如下命令 git merge dev 如下所示
$ git merge dev
Updating 8f2c28c..57ee7e5
Fast-forward
dev.php | 10 ++++++++++
1 file changed, 10 insertions(+)
create mode 100644 dev.php
合并之后 执行命令 ll -a 查看文件,dev.php 显示了出来。
git merge命令用于合并指定分支到当前分支上
删除分支:
例如你想删除dev分支:
$ git branch -d dev
Deleted branch dev (was 57ee7e5).
删除后查看当前的分支:
$ git branch
* master
查看分支:git branch (显示当前已经建立的所有分支,*表示当前所在的分支)
创建分支:git branch dev //创建dev分支
切换分支:git checkout dev //切换到dev分支上
创建+切换分支:git checkout –b dev
合并某分支到当前分支:git merge dev //将dev 分支与当前所在的分支合并。
删除分支:git branch –d name // git branch -d dev :删除dev分支
#冲突解决:
假如我们 首先在master 分支下 在a.php 文件中 添加内容: echo “我是在 master 分支上添加的”;
执行命令:git add a.php ; git commit -m “master分支a.php 添加内容”; git push origin master (提交到远程master分支上)
然后在 首先在 dev 分支下 在a.php 文件中 添加内容: echo “我是在 dev 分支上添加的”;
执行命令:git add a.php ; git commit -m “dev分支a.php 添加内容”; git push origin dev (提交到远程dev 分支上)
此时我们切换到 master 分支 去合并dev 分支出现如下:
$ git merge dev
Auto-merging a.php
CONFLICT (content): Merge conflict in a.php / /此处提示 a.php 在合并的时候 出现冲突了
Automatic merge failed; fix conflicts and then commit the result. // 自动合并失败;修复冲突,然后提交结果。
执行git status 查看具体情况
$ git status
On branch master
Your branch is up-to-date with ‘origin/master’.
You have unmerged paths.
(fix conflicts and run “git commit”)
Unmerged paths:
(use “git add <file>…” to mark resolution)
both modified: a.php
no changes added to commit (use “git add” and/or “git commit -a”)
我们打开a.php 查看里面的内容:
$ cat a.php
<?php
echo “添加a.php”;
<<<<<<< HEAD
echo “wo zai master 分支上添加的”;
=======
添加dev
echo “wo zai dev分支上添加的”;
>>>>>>> dev
?>
上面红色的内容为冲突的代码。
Git用<<<<<<<,=======,>>>& gt;>>>标记出不同分支的内容,其中<<<HEAD是指主分支修改的内 容,>>>>>dev 是指dev 分支上修改的内容,
我们可以使用 vim a.php 修改下如下后保存:
$ cat a.php
<?php
echo “添加a.php”;
echo “wo zai master 分支上添加的”;
echo “wo zai dev分支上添加的”;
?>
将冲突解决后,修改的文件更新发哦master分支上,执行以下命令即可:
git add a.php ; git commit -m ” meger合并dev 删除a.php 内的冲突内容” ; git push origin master ;
此时在master 分支上 合并dev 分支 ,解决冲突更新git后成功了!。
修改提交后,可以使用git log 查看提交记录:
$ git log
commit 0a52a0941162844f06ee591be
Merge: d06cf 43c65
Author: php7 <php7@php7.net>
Date: Wed Jun 13 22:13:46 2018 +0800
meger合并dev 删除a.php 内的冲突内容
参考:http://blog.jobbole.com/78960/