Git 简单操作

/*
本地也存有离线的远程主机分支代码
这里包含三个仓库对象,分别是

本地仓库(存在本地git)
本地离线主机仓库(存在本地git)
远程主机仓库(存在远程git)

各对象包含有各自的分支



安装git
安装后开始菜单里有三个快捷方式
Git Bash 是基于CMD的,在CMD的基础上增添一些新的命令与功能。所以建议在使用的时候,用Bash更加方便
Git CMD 是CMD
Git GUI 是可视化图形界面



因为Git是分布式版本控制系统,每个机器都需要一个标识,也就是:用户名和Email地址,用户名和邮箱地址相当于身份标识,是本地Git客户端的一个变量,不会随着Git库而改变。
每次commit都会用用户名和邮箱纪录。
github的contributions跟邮箱是有关联的。
*/
//查看自己的用户名和邮箱地址:
git config user.name
git config user.email





//修改用户名和邮箱地址:
git config --global user.name chimuhuadao
git config --global user.email zdy_521@126.com





//先进入D盘
d:





//再进入指定目录,windows下也可以直接打开目录窗口,在窗口内点击鼠标右键选择 Git Bash Here,效果等同,这里目录是 D:ApacheServerweb	est
cd ApacheServer/web/test




/*
通过git init命令把这个目录变成git可以管理的仓库,执行后显示 Initialized empty Git repository in D:/ApacheServer/web/test/.git/
提示是一个空的仓库,目录下多了一个.git的文件夹,这个文件夹是git来跟踪管理版本库的
*/
//把目录变成git可管理
git init





//查看当面目录下文件结构
ls -ah





/*
创建查看管理本地离线主机名
git remote                         ----查看当前关联有哪些远程仓库(本地离线主机)。它会列出每个远程主机的简短名字.在克隆完某个项目后,至少可以看到一个名为 origin 的远程主机(除非克隆时重命名了),Git 默认使用这个名字来标识所克隆的原始主机
git remote -v                      ----列出详细信息,在每一个名字后面列出其远程url
git remote show 离线主机名                   ----查看该本地离线主机的详细信息, 列出已经存在的远程分支。例 git remote show origin
git remote add 离线主机名 网址             ----命令用于添加本地离线远程主机。例 git remote add origin https://github.com/chimuhuadao
git remote rm 离线主机名                       ----删除本地离线主机名  例 git remote rm origin
git remote rename 原主机名 新主机名   ----重命名关联的本地离线主机 例 git remote rename origin newname
*/
//添加本地离线主机,主机名为 origin ,关联的地址为 https://github.com/chimuhuadao
git remote add origin https://github.com/chimuhuadao






/*
初始更新获取远程主机分支内容到本地离线主机离线分支内
或者当远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地的离线远程主机离线分支中,但不影响本地分支代码,这时就要用到git fetch命令
git fetch 远程主机名                       ---- 将某个远程主机所有分支的更新,全部取回本地(需要先将命令窗口定位到本地仓库目录中)。例 git fetch origin
git fetch 远程主机名 远程分支名   ---- 取回远程主机指定分支的更新。例 git fetch origin branches_test
*/
//取回远程主机 origin 的 branches_test 分支的更新
git fetch origin branches_test






/*
修改查看新建本地分支名,只能对本地分支操作,可查看本地离线分支
git branch 分支名                           ---- 创建本地新分支但不切换到新分支,如本地分支名已存在则报错。例 git branch newBrach
git branch -m 原分支名 新分支名 ---- 重命名分支。例 git branch -m newBrach newBrach2 。将分支 newBrach 改名为 newBrach2
git branch -M 原分支名 新分支名 ---- 强制重命名,新分支名已存在也进行重命名,不会报错,新分支如存在会将原分支内容强行加入新分支中(但当前分支不能是新分支名),  例 git branch -M newBrach2 newBrach3
git branch -d 分支名                     ---- 删除分支。例 git branch -d newBrach2 。删除分支 newBrach2,删除当前所在分支是不行的,会提示删除失败。
git branch -vv                ---- 查看本地所有分支,及关联(追踪)的远程分支,当以远程分支创建的本地分支,会自动关联(追踪)该远程分支,以本地分支创建的新分支则没有
git branch -r                 ---- 列出本地离线远程分支
git branch -a                 ---- 查看当前仓库所有分支,及本地离线远程仓库的分支
git branch -a 显示的内容如下
名字前面带*的分支是当前库所用分支名
remotes/主机名/HEAD -> 主机名/分支名   ---- 显示这个离线远程主机仓库默认分支名(不一定是本地库所关联的远程分支名), 例 remotes/origin/HEAD -> origin/master
remotes/主机名/分支名                                ---- 这个可能显示多条,显示本地离线远程主机库所拥有的分支。例 remotes/origin/branches_test ,可能是实际线上的主机分支数量名称有差异,需要执行 git fetch 主机名 来更新本地离线主机分支信息
*/
//查看当前仓库所有分支,及本地离线远程仓库的分支
git branch -a






/*
创建切换本地分支
git checkout 分支名                                                           ---- 切换到本地新分支,如不存在则创建后切换。例 git checkout branches_test,切换新分支后目录中的文件及代码内容会自动换到对应分支内容
git checkout -b 新分支名 原分支名                                 ---- 本地基于原分支名,创建新分支。例 git checkout -b newBrach2 newBrach 在本地newBrach分支基础上创建newBrach2分支
git checkout -b 分支名 离线主机名/本地离线主机分支 ---- 本地仓库中在本地离线远程主机 origin/branches_test 分支版本的基础上,创建一个新分支 newBrach,并切换到新分支 newBrach,这里不能直接连接线上主机某分支在其基础上创建本地分支。例 git checkout -b newBrach origin/branches_test
*/
//以离线主机 origin 的 branches_test 离线分支创建本地分支 newBrach
git checkout -b newBrach origin/branches_test







/*
建立分支追踪关联
git branch --set-upstream-to 离线主机名/离线分支名 本地分支名 ---- 将本地分支名关联(追踪)到离线主机某离线分支,建立管理的同时,会同步下两个分支的文件代码
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)如在git clone的时候,或者git checkout以离线主机分支建立本地分支的时候,建立追踪关系,也就是说,本地的分支自动"追踪"线上分支。
*/
//将本地newBrach分支关联到本地离线主机origin的离线branches_test分支上
git branch --set-upstream-to origin/branches_test newBrach






/*
查看当前本地仓库的状态(当前路径进入到哪个仓库则显示哪个仓库的状态)
如果有要提交的东西会显示为红色(意味着根本就没进入临时仓库中)
执行git add后红色会变成绿色,意味着文件已经放到临时仓库中
再执行git commit -m 后绿色文件也没有了,意味着提交成功,也就是临时仓库中的文件提交到真正的仓库中去了
*/
git status



/*
撤销所有本地修改的但未被 git add 的文件,不包括新增文件
*/
git checkout . 




/*
将新建或改动添加到本地缓存区(本地临时仓库中)
git add 有几种添加方式
git add 文件路径 ---- 如 git add laydate/newfile.php
git add .       ---- 他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u      ---- 他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A      ---- 是上面两个功能的合集(git add --all的缩写)
*/
git add .







//使用git commit将本地临时仓库里的文件提交到本地正式仓库,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样就能从历史记录里方便地找到改动记录。
git commit -m "wrote a new file"







/*
拉取远程主机仓库更新
git pull 本地离线主机名 线上分支名:本地分支名 ---- 将指定主机线上的某分支合并到本地指定分支。例 git pull origin branches_test:newBrach ,作用相当于 (git fetch 主机名 线上分支名) + (git merge 本地离线主机名/离线主机分支名 本地分支名)
git pull 本地离线主机名 线上分支名                      ---- 如果远程分支是与本地当前使用分支合并,则冒号后面的本地分支名可以省略。例 git pull origin branches_test
git pull 主机名                                                         ---- 如果当前分支与远程分支存在追踪关系,git pull 离线主机名 后面就可以省略远程分支名。例 git pull origin
git pull                                   ---- 如果当前分支只有一个追踪分支,连主机名都可以省略。
如果远程主机删除了某个分支,默认情况下 git pull 不会在拉取远程分支的时候删除对应的本地分支,这是为了防止由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。但是改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。例 git pull -p
*/
git pull origin branches_test:newBrach





/*
推送本地更新到远程主机
git push命令用于将本地分支的更新,推送到远程主机。当然推送的内容需要在本地先经过 git add 和 git commit 提交更新本地仓库后才能推送成功
git push 主机名 本地分支名:远程分支名 ---- 将本地分支修改推送到指定的远程主机分支上,如果指定的远程分支不存在则在远程主机仓库里创建这个分支。例 git push origin newBrach:branches_test。将本地newBrach分支上的修改推送到origin主机branches_test分支上
git push 主机名 本地分支名                      ---- 如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名,不存在则自动创建)。例 git push origin newBrach
git push 主机名 :远程分支名                    ---- 删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。例 git push origin :branches_test。注意主机名和:之间有空格
git push 主机名                                          ---- 如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略,但是本地,远程分支名称必须一致。例 git push origin
git push --all 主机名                              ---- 将所有本地分支都推送到指定主机对应分支,远程主机没有对应分支则创建同名分支。例 git push --all origin
git push -u 主机名 本地分支名                ---- 不管指定的本地分支之前关联的远程主机某个分支,执行该语句后会将本地指定分支推送到远程主机同名分支中,并产生关联,远程主机没有同名分支则创建。同时指定该主机名为默认主机,以后就可以不加任何参数使用 git push 来推数据了。例 git push -u origin newBrach
git push 主机名 --tags              ---- git push不会推送标签(tag),除非使用--tags选项 例 git push origin --tags
*/
git push origin newBrach:branches_test





/*
克隆
git clone xxx.git              ---- 该命令会在本地当前目录下生成一个目录(仓库),与远程主机的版本库(仓库)同名。
git clone xxx.git 指定目录           ---- clone到本地指定目录。例 git clone https://github.com/chimuhuadao/helloword.git example/test/folder ,会克隆到当前目录下的 example/test/folder 子目录里
git clone -b 远程分支名 xxx.git ---- 不指定远程主机仓库分支,则默认克隆远程仓库的master分支,指定后克隆指定分支。例 git clone -b branches_test https://github.com/chimuhuadao/helloword.git , 将远程仓库的branches_test分支克隆到本地,并在本地创建branches_test分支保存对应内容
git clone -o 离线主机名 xxx.git ---- 克隆版本库的同时命名所使用的远程主机本地离线名称,否则所使用的远程主机离线名会自动被Git命名为origin。例 git clone -o newname https://github.com/chimuhuadao/helloword.git,表示,克隆的时候,命名远程主机离线名叫做newname。
相同目录下如已克隆一个分支,则不可再次克隆其他分支,否则会报错,因为每个分支包含文件内容可能不一样,不能合并
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。
git clone http://example.com/path/to/repo.git
git clone https://example.com/path/to/repo.git
git clone ssh://example.com/path/to/repo.git
git clone git://example.com/path/to/repo.git
git clone /opt/git/project.git 
git clone file:///opt/git/project.git
git clone ftp://example.com/path/to/repo.git
git clone ftps://example.com/path/to/repo.git
git clone rsync://example.com/path/to/repo.git
SSH协议还有另一种写法。
git clone git@example.com:path/to/repo.git 例 git clone git@github.com:chimuhuadao/helloword.git ,@前的 git 是 Git 版本管理器使用的,一般是用来表示使用 git 协议
*/
//这里测试克隆新注册的github的版本库。https://github.com/chimuhuadao/ 是网址,helloword 是仓库名
git clone -o origin -b branches_test https://github.com/chimuhuadao/helloword.git helloword






/*
合并分支命令(原分支不受影响)
git merge 分支名                                            ---- 将指定分支代码内容合并到本地当前分支中,原分支不受影响,原分支可以是本地的其他分支,也可以是本地离线主机的某个分支(不会合并线上主机某分支)。例 git merge branches_test
git merge 本地离线主机名/离线主机分支名 ---- 将本地离线主机中的指定分支合并到本地当前分支。例 git merge origin/branches_test 将本地离线主机origin的branches_test分支合并到本地当前分支
将本地branches_test分支合并到当前分支中,其后也可加本地当前分支名,也可省略。例 git merge branches_test newBrach,newBrach为本地当前分支名
*/
git merge branches_test






//查看最近操作记录,按 q 返回命令界面
git log





/*
有些远程git服务器被下载或被更新其代码时是需要在远程服务器上面设置本地服务器(发出请求的服务器)的秘钥的
这时要在本地主机生成一个唯一秘钥(每台主机都只能生成唯一一个)
输入回车之后一直点空格即可
生成后界面会显示秘钥生成位置
例
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
这句话最重要,到该目录下找到公钥id_rsa.pub打开,复制其中代码,设置到远程git服务器上,请求的机器即可正常刷新,克隆等操作了
*/
ssh-keygen -t rsa





//在init的根目录下执行修改配置文件,防止git记录文件权限等的改变
git config core.fileMode false




/*
.gitignore 文件
如果目录下有该文件,则git会根据里面规则忽略掉指定的目录文件 git add 时自动忽略不添加
常用的规则:
/mtk/        ----过滤整个文件夹
*.zip        ----过滤所有.zip文件
/mtk/do.c    ----过滤某个具体文件
*/





/*
本地推送完成后要在窗口里登录到远程ftp主机,再在远程ftp主机中创建git管理目录,操作git命令更新远程git主机上仓库代码
例
//链接方式ssh方式,服务器用户名 username,ip 122.111.130.186,连接的端口 22
//在git窗口中输入
ssh username@122.111.130.186 -p22
输入密码回车
//进入服务器仓库目录
cd /html/www/XXX.com/
//执行拉去动作
git pull origin newBrach:branches_test
exit
*/
原文地址:https://www.cnblogs.com/dreamhome/p/7778572.html