写在前面: 熟悉暂存区,工作树,commit(提交) 都是个啥。。
基本命令和分支处理
1.git diff (用来查看暂存区和工作树之间的差别,如果暂存区没有数据,那么就显示工作树和最新提交状态之间的差别)
刚进行过工作树的更改,提交暂存区,暂存区与工作树并无差别。无显示,,,可以git diff HEAD (查看这次提交与上次提交之间的差别,最好用在git commit 之前。)
保险起见,在commit之后,查看一下提交日志,git log,确认提交成功
git branch (显示分支一览表)
git checkout -b 分支名 (创建并切换分支) ==【git branch 分支名】 加 【git checkout 分支名】
培育分支------(不断地对一个分支进行提交的操作)
git checkout 分支名 (切换到指定分支)
git checkout - (切换为上一个分支)
git add . (提交工作区与上次提交之间的所有的有不同的文件到暂存区)
git merge --no-ff 分支名 (master分支与分支(分支名)合并,为了在历史记录里明确记录下这次合并,加上 (--no-ff)参数) 之后编辑器启动,将编辑器内容保存,再关闭编辑器即可。。。。?
git log --graph (以图表形式查看分支)
git log –pretty=oneline(精简版,每个提交日志只占一行)
git log(查看提交历史,查看中,一直出现冒号: , 如果想要退出,那么就需要使用命令字符 q)
git reset --hard 哈希值 (版本回溯,只要提供目标时间点的哈希值,就可以完全回溯到目标时间点的状态)
git reset --hard HEAD^ (回溯到上一个版本)
git reset --hard HEAD^^ (回溯到上上个版本)
"推进历史":在历史版本中创建一个分支后,想与最新合并后的状态合并,要先从历史的版本向最新的方向走,就是“推进历史”
git log 只能查看以当前状态为终点的历史日志,推进历史找哈希值时不妨用 git reflog (查看仓库的操作日志)
然后可以回溯到历史前的状态。先回到主分支 git checkout master 再 git reset --hard 哈希
git merge --no-ff fix-B:
$ git merge --no-ff fix-B
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
有矛盾
<<<<<<< HEAD
I add a 分支 feature-A
=======
--fix-B
>>>>>>> fix-B
解决矛盾并提交
I add a 分支 feature-A
--fix-B
保存该文件,git add ,git commit即可
要修改上一条提交信息,git commit --amend 执行 vim编辑器启动
vim编辑器的使用:
进入vim编辑器,如果后接文件名,则进入该文件的编辑模式,看图:
①.vim编辑器中,按i进入编辑模式;
②.按Esc回到锁定模式;
③.锁定模式下按:进入命令模式;
④.命令模式下输入quit不保存退出write保存不退出wq保存退出
cat README.md 回车就可以直接看到该文件的内容
更改历史:
git rebase -i HEAD~2 (可以打开编辑器,显示最新两次提交信息,如果有修改拼写错误的提交,可以将其合并到原有拼写错误的提交,成为一次完美的提交)
系统将显示rebase成功
git branch -a (不但可以显示所有的分支,而且可以显示本地和远程仓库之间的联系。)
推送至远程仓库:
若本地与自己远程库已有联系,比如clone下来的,可以直接git push -u origin master (将更改推送到远程github的master分支,需确保更改无误可以与主分支master合并,一般本地也是在master分支上改 ,,,,一般不这么做)
一般在本地建立特性工作分支 如 feature A ,
push的话: git push -u origin feature A (这样远程--github,就自动生成了名为 feature A 的分支,并与本地保持同步,不影响本地和远程的主分支)
若github 上的仓库是新建的,与本地无联系,要先git remote add origin 仓库链接地址,再git push -u origin master
(加上-u参数可以让origin的master分支处于本地当前分支的上游,git pull 时省去很多配置)
推送至master以外的分支,操作类似,git push -u origin feature-C (本地最好也处于这个分支)
git pull origin 分支名(拉取最新数据,与git push有很多类似)
github:
shift+/ 可以显示快捷键
修改url 查看文件及其差别的方法:/*?????
https://github.com/xikebyme/Hello_World/blob/master/hello_world.php#L2
这是指向了第二行
https://github.com/rails/rails/compare/vul_test...xike_change
两个分支进行比较的URL
https://github.com/rails/rails/compare/master@{7.day.ago}...master
比较7天之间的差别
https://github.com/rails/rails/compare/master@{2013-01-01}...master
查看指定日期之间的差别
[WIP]work in prograss 正在开发的pr,防止被误合并。
仓库的维护(永远让仓库处于最新的状态,防止本地仓库与开发过程脱节)
fetch 可以使本地仓库保鲜。。。
给原仓库设置(拥有代码绝对权限,版本权限的人的仓库)名称:
git remote add [名称] https://......(原仓库地址) 今后就以该名称作为该仓库的标识符(只需设定一次)
获取最新数据并更新:
git fetch [名称]
git merge [名称]/master
显示Already up-to-date即可
采纳pull request 的方法:
如果pr很简单,这时只需要在网页上点击Merge p r 即可。然后再修改本地自己的开发环境就行/*?????????
pr 如果足够大,要先在本地进行检验(安全接收PR),看是否可以被合并。如图;
获取发送方的远程仓库。。。
创建用于检测的分支,检测合适的话,就可以点击网页上的Merge 了。
具体:git remote add PR发送者 【网址】
git fetch PR发送者
git checkout -b pr1
git merge PR发送者/work
检查结束后pr1分支就没用了,删除,,git branch -D pr1
然后切换到gh-pages 分支,合并PR发送者/work
查看本地与自己github 上有什么不同,git diff origin/gh-pages
最后,git push
(这种方法,也可以直接让github上的相应pr 关闭,并且显示已经合并)
为仓库主提交pr(PULL Request 实际代码修改建议):(简述)
1,登录自己的github,在另一窗口打开仓库主GitHub页面,在仓库主仓库主页点击 fork
2.找到自己仓库集里的 如图 找到clone 按钮,就会有clone提示,clone到本地就行
3.在本地创建分支 如 dev-A
4.在本地特性分支上进行修改,提交
5.本地切换到主分支,在此分支下将本地特性分支推送到远程github上fork来的仓库里 push命令(见上)
6.在github上给仓库主发送pr(简单),并告知仓库主
ok......
github==Git + Hub
/*注意Hub命令,效率更高,可以完全覆盖git命令,可以尝试使用。。。。。
细节可能有些许误差,,,,可在网上小查一下,以实际情况为准