很久没有用git来提交代码了,特此开一个blog来记录常用的git使用命令与及错误处理方法(长期更新)
首先要使用git,如果是新手必看一下教程http://git-scm.com/book/zh
或者看一下大牛的blog
http://blog.csdn.net/ithomer/article/details/7529022
git跟svn一样,都是常用的版本管理工具
git很多命令都跟svn相似
比如add 、commit等等~~~
git初始化
git init
首先我新建一个文件夹
然后初始化
初始化后在本地代码库会自动创建一个.git隐藏文件,这个就是本地代码库然后我把远程的代码库clone下来,类似svn的co命令
网站上什么都没有(我新建了一个版本库)
其实新建完了都有提示步骤的
我往clone下来的文件夹里面添加之前有的我写的一个MP3播放器的代码
接下来就是add了,惯性写成了svn add 了
应该是git add 的
正确的应该是:有一些warning,不用管
在然后就是commit了,跟svn的步骤一模一样
在然后就是上传到远程的服务器上面
在上传之前看一下这服务器的信息
git remote -v
再看一下代码的信息
git status
nothing to commit 说明全部都commit了
也可以设置短命令来代替status
比如用st来代替status
其实这个东西是在~/.gitconfig这个文件里面设置的
直接git config --list可以查看这个文件里面的设置
看一下结果git st
同样的效果其他的也可以这样设置
例如:
git config --global alias.co checkout git config --global alias.ci commit git config --global alias.st status git config --global alias.br branch
言归正传:开始往服务器上放代码
git push origin master
上传完毕之后就可以到刚刚的网页上看一下有没有传上来了
把刚刚的那个页面刷新一下
到此基本的一个流程就走完了~~
==============================我是分割线=========================================
然后就是git的分支了
git 查看分支
(本地) git branch
(远程) git branch -r
(查看远程分支详情)git remote -v
(添加远程分支)git remote add 名字 路径
(删除远程分支)git remote remove 名字
其他help查看一下
git remote [-v | --verbose]
gitremoteadd [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=<fetch|push>] <name> <url>
gitremoterename <old> <new>
gitremoteremove <name>
gitremoteset-head <name> (-a | --auto | -d | --delete | <branch>)
gitremoteset-branches [--add] <name> <branch>...
gitremoteset-url [--push] <name> <newurl> [<oldurl>]
gitremoteset-url--add [--push] <name> <newurl>
gitremoteset-url--delete [--push] <name> <url>
gitremote [-v | --verbose]show [-n] <name>...
gitremoteprune [-n | --dry-run] <name>...
gitremote [-v | --verbose]update [-p | --prune] [(<group> | <remote>)...]
====================================================================================================
git创建分支
git branch 分支名
git 切换分支
git checkout 分知名
上面两步可以合并成为一步
git checkout -b 分支名
git 分支的合并,合并有两个命令 1、merge 2、rebase
这两个命令的结果是一样的,都是将不同分支的代码融合在一起,但是生成的代码树就稍微有些不同,merge的分支会比较乱
rebase之后就只有一个分支了
===================================================================================
git fetch 远程分支,
这里可以直接
git fetch origin//会获取全部分支
或者git fetch origin master //获取某个分支
这个时候远程分支下载到本地了,可以跟本地的分支进行对比
git diff master origin/master //远程分支与本地分支(commit之后的)对比
如果对比得结果是自己想要的,就可以进行合并也就是merge,如果是合作开发的话,
每次开发之前都要进行这两步操作
git merge origin/master //在这之前,要先checkout 到本地的 master
如果merge发生冲突,解决冲突之后,还要add和commit
...................................................................................................
如果非常确定那些代码被修改过了
可以使用git pull来代替上面的三个命令
==================================================================================
本地作出更改之后,即进行开发之后,可以提交的远程分支(!!!!注意这个是最后一步了)
就是使用上面的那个命令,
git push origin master //当前是本地的master分支,初学者会注意不到
=================================================================================
日志查看
git log
常用的三个参数
git log --graph //有图的形式
-git log -oneline //只显示精简信息
git log --all //查看所有commit
================================================================================
压缩多个commit
当你提交代码进行代码审查时或者创建一次pull request (这在开源项目中经常发生),你的代码在被接受之前会被要求做一些变更。于是你进行了变更,并且直到下一次审查之前你没有再次被要求进行变更过。在你知道又要进行变更之前,你已经有了一些额外的commit。理想情况下,你可以用rebase命令把多个commit压缩成一个。
git rebase -i HEAD~[number_of_commits]
如合并后面两次
git rebase -i HEAD~2
这时候会要求你编辑commit信息
把不需要的在前面加上#表示注释,修改只留下一行没有的commit信息
================================================================================
git 忽略某个文件或者某些文件
其实就是在 项目的根目录下的 .gitignore 文件设置一些忽略规则
具体可以看一下这个链接
http://blog.csdn.net/liuqiaoyu080512/article/details/8648266
===============================================================================
git 的版本回退,主要是reset命令
命令为git reset --hard 版本号(这个号是某个版本前面的hash值)
HEAD 代表当前的版本号,上一个版本号可以用HEAD^来代替
上上个可以用HEAD^^,前面n个版本可以用“HEAD~数字来代替”
比如会到上上个版本可用
git reset --hard HEAD^^或者git reset --hard HEAD~2又或者git log 一下找到上上个版本的版本号然后git reset --hard 版本号
==============================================================================================
git 目录下有三个空间(注意都是本地的),1、工作区(你写代码的地方)2、stage暂存区(git add 之后会把改变的放在这里)3、版本库(git commit 之后会把改变添加到版本库)
这里要注意的是代码只有一份,暂存区和版本库存的是代码的改变(change)
所以可以用“git diff HEAD -- 路径"来查看工作区与版本库的某个文件的最新区别
也可以用”git checkout -- 路径“将工作区修改过的内容恢复到最近一次”git commit “或者”git add “ 的状态,注意add 如果add 过也是算的
注意这个"git checkout -- file"要有 ”--“,否则就跟那个创建分支的命令没有区别了,还有就是,这个命令是在没有不需要大面积修改的时候使用,如果大面积修改,使用的应该是git reset命令
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。=================================================================================================