环境部署:
1、服务器106.12.2.195(CentOS7.3)
git仓库根目录:/gitrepo/qinsercmf.git 项目部署地址 /home/wwwroot/qinsercmf.git
2、本地开发:Windows下 /c/MyProject/qinsercmf
3、本地与服务器采用密钥链接
Git 服务器搭建见: Centos7.3从零部署Git服务器之(二)初始搭建一个项目的Git空仓库
一、初始化创建命令
创建仓库命令
1、git init --bare qinsercmf.git 创建一个新的裸仓库 (新项目推荐使用这种方式)
主要适用于项目的初始阶段,什么数据都没有,仅仅是建立一个裸仓库,用于设置仓库和项目源码分离,方便以后管理,比如把项目/home/wwwroot/qinsercmf 的管理仓库放置在 /gitrepo/qinsercmf.git内。
2、git init 初始一个已知项目的仓库
适用于在已有项目根目录里创建git仓库,例如已有项目/home/wwwroot/mytest/ ,我们可以 cd /home/wwwroot/mytest/里面直接使用 git init 生成库仓库,
实例:创建项目裸仓库
root用户:
# cd / //在根目录下创建
# mkdir gitrepo // /gitrepo为所有git仓库目录
# chown -R git:git ./gitrepo //变更用户为git用户
# cd gitrepo
# git init --bare qinsercmf.git //创建一个名为qinsercmf.git的裸的git仓库
出现
Initialized empty Git repository in /gitrepo/qinsercmf.git/ 创建成功
# chown -R git:git qinsercmf.git/ 变更用户为git用户
此克隆地址为: git@106.12.2.195:/gitrepo/qinsercmf.git
二、客户端git常用命令
初始化(不常用)
1、git config --global user.name "niuxitong" 设置用户名
2、git config --global user.email "niuxitong@126" 设置邮箱
3、ssh-keygen -t rsa -C "你的邮箱" 这条命令前面不用加git
4、git clone git@106.12.2.195:/gitrepo/qinsercmf.git 克隆远程到本地
三、克隆此项目到本地
本地项目部署在 C:\MyProject\
使用windows下的git工具 在此目录:右键-> Git Bash here
此时C:\MyProject\目录下多个了一个 qinsercmf的目录,并且里面有一个隐藏的.git目录。测试已经克隆成功。(如果看不到此。git目录,请设置你的系统显示隐藏目录)
2、创建本地分支
初始状态下本地没有任何分支,只有远程的master分支
在本地新增任意一个文件
然后 依次执行 git add . 和 git commit -m "备注信息" 这时就创建了本地master分支,这时就可以创建本地分支了。如下图:
分支管理命令:
1、git branch 查看当前分支
2、git branch niuxitong 添加一个新分支
3、git branch -d niuxitong 删除一个分支 ,
4、git checkout zhangsan 切换分支到zhangsan,如果没有此分支,就自动创建这个分支
5、git checkout -b zhangsan 创建并切换到 zhangsan分支上(相当于git branch zhangsan 、git checkout zhangsan)
6、git branch -al 查看所有本分分支和远程分支
7、git push origin --delete demo 删除远程分支demo (高版本的git 不再支持delete)
git branch -r -d origin/demo
8、git checkout --track origin/develop 当远程有这个分支本地没有时,可以执行此命令自动在本地创建此分支,并自动关联远程分支了。
9、如何修改本地分支名(未推送到远程)
git branch -m oldName newName
10、远程分支重命名(已经推送到远程和本地关联相同)
执行以下4步骤:
# 一定要在非当前修改分支上执行
a. 重命名此分支
$ git branch -m niuyumiong(旧) niuyuming(新)
b. 删除远程分支
$ git push -delete origin niuyumiong
c. 上传新命名的本地分支
$ git push origin niuyuming
d.把修改后的本地分支与远程分支关联
$ git checkout niuyuming ---------- 一定要切换到要关联的分支上
$ git branch --set-upstream-to origin/niuyuming
9、https://www.cnblogs.com/chechen/p/9950798.html http://ittxx.cn/view/164?from=timeline
四、文件提交常用命令
1、git status 查看当前状态
2、git add . 或者 git add xxx.php 或者 git add -A 添加指定文件或者所有更新到追踪中,
3、git reset xxx.php 撤销重 add 添加的追踪 (不常用,在add 之后commit之前操作)
4、git commit -am "备注信息" (-a 表示all添加所有 -m 表示message填写备注信息 )"备注信息" 将文件提交到repository里。提交信息用英文的双引号括起来。(必须执行完add 才能操作)
5、git rm xxx.php 删除一个文件(指的是已经提交过的文件)
6、git checkout xxx.php文件名 撤销对文件xxx.php的更改
7、get checkout niuxitong 分支名 切换到niuxitong分支 (如果没有此分支名,则会自动创建此分支)
8、git merge niuxitong 合并niuxitong分支 (如在master分支上)
9、git push [origin master ] 提交本地分支到远程,(第一次提交或者指定分支,就使用 origin + 分支名)
10、git push niuxixitong:niuxitong 提交本地分支到远程
11、git diff HEAD 查看文件的变化 ( 通常在 git add 之后 git commit 之前执行查看)
git diff 001.txt 查看001.txt文件的变化 ;
git diff HEAD 查看所有文件的变化
12、git log 查看日志
提交流程实例:
1、git checkout niuxitong 切换到自己分支,本地一定要在自己分支上开发,特别是团队合作时。
扩展:
git branch 显示当前分支 和本项目本地的所有分支
git branch niuxitongtest 添加一个新分支 (如果当前分支是master,那么就表示在master分支上添加的新分支,因此使用添加分支命令前最好先执行一下)
git branch -d niuxitongtest 删除这个分支
2、git status 查看当前仓库状态,列出当前修改过的文件和新增的文件。碰到问题不知道怎么办的时候,可以通过看它给出的提示来解决问题
(1)执行git status 出现如下图:
说明当前分支是干净的,无任何变化
(2)新增加一个文件(在./view/my/目录下新建一个文件 test.html)内容如下图
再次执行: git status 出现如下:
通过提示可以看出 :
(1)执行 git reset HEAD application/admin/view/my/test.html 可以暂停撤销此文件的加入。(不常用)
(2)执行 git add 命令把更新的内容提交上(类似于到git的追踪器)
(3)执行 git checkout -- application/admin/view/my/test.html 可以取消此添加(在执行add后commit前有效)
3、git add -A 把文件添加到git进程中
参数 -A (或者 . ) 表示添加所有
也可以使用: git add application/admin/view/my/test.html 单个文件添加
可以通过 git checkout -- 进行撤销所有add 到
4、git commit -m "备注信息" 这一步才将本地更新提交到本地git仓库
执行 git commit -m "提交信息" 将文件提交到repository里。提交信息用英文的双引号括起来。
注意:
(1)执行git commit 必须跟 -m "提交备注信息" 参数,用于log日志查看
(2)执行 git log 可以查看提交日志了
再次执行 git status
提示Your branch is ahead of 'origin/niuxitong' by 1 commit. --你的分支领先于远程'origin / niuxitong' 1个版本
在SmartGit可视化工具上可以看到:
(use "git push" to publish your local commits) -- 提示你下一步该执行“git push”发布您的本地提交到远程
5、git push 将本地仓库的跟踪推送到远程
如果此本地分支是第一次推送,(远程git仓库并没有此分支)
就使用
# git push --set-upstream origin niuxitong (高版本的git --set-upstream用法有变化见下面)
或者
# git push origin niuxitong
先把分支推送到远程, 此命令最好在添加分支之后就执行一次,推送到远程后,别人才能看到。
说明:由于我们这里采用的是密钥连接的,因此这里没有输入密码直接执行git push就可以了。如果你是使用密码连接的,这里会提示你输入密码。
再次执行 git status
说明 本地更新已经成功推送到了远程仓库管理,目前本地分支和远程分支是相等的了
到此,已经成功的将自己本地分支的更新成功的推送到远程仓库中了, 团队中的别人可以通过git pull 来拉取你的niuxitong分支的内容了。
如何将自己分支的内容 合并到 master分支上???
继续:
6、git checkout master 切换到master分支
7、git pull 拉取master分支的内容(比如团队中zhangsan更新了master仓库)
这里master没有更新,因此显示Already up to date.(已经是最新的)如果有更新,会拉取更新内容。同git push命令一样,如果你是使用密码连接的,这里同样会提示你输入密码
8、git merge niuxitong 合并niuxitong分支更新内容到当前分支
如果有CONFLICT (content): Merge conflict in AdminLib/Runtime/Cache/System/test.php 字样出现,说明有冲突文件,这里会报出冲突,解决冲突后执行: git commit -m "备注" 即可。
9、git push 推送到远程
到此 master 分支内容已经合并了niuxitong分支的内容,并且已经推送到远程了。
10、git checkout niuxitong 一定不要忘记切换到自己分支
11、git merge master 把master内容合并到自己分支上(如zhangsan提交到master分支的内容)
到此,客户端整个提交已经完成。 通知运维更新远程服务器代码吧。
五、版本回退
1、git log 显示从最近到最远的提交日志 版本号为hash数值
git log --pretty=oneline ,一行显示
含有 HEAD 的为当前版本
2、git reset --hard HEAD^ -- 回退到当前版本的上一个版本
此时 001.txt文件的内容已经还原到上个版本了
3、git reset --hard d83a5068d8dbe (版本号的至少前七位或者完整的版本号) 按指定版本号还原。
可以看出,一旦回退到某个版本后,此版本后面的版本号 就将看不到了。
比如本次退队到了 第25次版本。 现在想再次还原到 第28次。就不知道版本号是多少了。如何处理呢???
可以使用 git reflog 命令来查看每一次处理的版本号
4、git reflog 用来记录你的每一次命令
通过此命令然后可以找回所有的版本号
六、git 常见问题:
1、git diff 查看文件变化
2、git checkout -- . 撤销更改
3、git log 查看提交的 commit记录
4、如何清除未追踪的文件?
# git clean -xf
这个命令的杀伤力比较大,它删除当前目录下所有没有track过的文件。不管它是否是.gitignore文件里面指定的文件夹和文件
5、清除git缓存
依次执行如下三个命令
# git rm -r --cached .
# git add .
# git commit -m 'update .gitignore'
6、设置忽略文件
.gitignore
7、关于git status中文乱码的问题解决
如果你有文件名是中文的,在使用git status时会乱码会出现乱码:如下图
解决的办法两个:
方法一:
先执行命令:git config --global core.quotepath false
再执行:git status 就可以了
方法二:
进入项目的.git/目录下,找到git的配置文件config 在[core] 模块里添加 quotepath = false 配置即可