1.git的下载和安装(安装在centos上)
下载:http://www.linuxfromscratch.org/blfs/view/svn/general/git.html
安装:http://blog.51cto.com/13505030/2055144
备注:基于centos的安装
[root@Git ~]# cd git-2.7.3
[root@Git ~]# make configure
[root@Git ~]# ./configure --prefix=/usr/git ##配置目录
[root@Git ~]# make profix=/usr/git
[root@Git ~]# make install
添加环境变量 :在/etc/profile文件中添加export PATH=$PATH:路径
然后使用source /etc/profile保存,然后输入git会显示git相应的命令
设置全局的邮箱和名称(不需要设置为全局可以省略global),假如不设置邮箱和名字,git commit的时候会相应的提示你去添加。
git config --global user.email you@example.com
git config --global user.name "Your Name"
2. git的基本使用
git init:仓库的初始化,产生一个.git文件目录,用于跟踪版本管理。(一般情况下不要使用windows默认的记事本,建议使用notepad),默认是.git,可以git init 文件夹/文件名:在相应的文件夹下产生一个名称.git的文件夹,git init --bare 文件夹:产生一个裸仓库
git add 文件名1 文件名2...:添加一个或者多个文件到暂存区,为git commit做准备
git commit –m "信息" : 将暂存区的内容添加到本地仓库版本管理,信息表示备注,-m建议需写。
git status:查看仓库当前的状态
git diff file :比较修改的内容,遵循unix的diff格式(git管理的是修改,而不是文件)
git diff HEAD -- file :比较当前的版本库中的最新的版本与工作区file的区别
git log:查看历史日志,由近到远,由当前版本开始,使用时光机到历史版本后看不到未来的版本
备注:commit 后面的字符表示id,Author 我们设置的作者和邮箱
git reflog:查看所有的版本提交记录,用于版本穿越到过去和未来的参考以及一些其余的信息
get reset --hard 版本: 用于版本的穿越(过去和未来),HEAD^ 表示前一个版本 ,HEAD^^ 表示前两个版本,多个版本可以使用HEAD~n 表示 n表示整数,HEAD表示当前版本,回到未来版本需要使用commitid
文件的删除:先使用rm删除当前相应的文件,然后使用git rm 文件名,然后使用 git commit -m "信息"提交。
git checkout --文件名 :清空当前修改(回到未修改前的版本),有两种情况,一种是没有存放到暂存区,那么回到的版本与版本库的最新版本一致 ,另一种是添加到了暂存区,那么会相应的返回到暂存区的版本。
git reset HEAD file:将暂存区的该文件相应的去除
备注:推送到远程仓库后是不可以更改的,例如版本的撤销
git config --global 变量名 变量值:修改git的全局配置
git config --global alias.别名 被别名的名称 :配置别名
3.gitbisect检查错误
这个命令可以使用二分法查看某个分支从何处开始变坏的,在bug没有引入之前和bug引入之后选取两个提交点, 例如:判断某一个文件中是否有aaa(坏点),可以使用grep “aaa” 文件名,假如是坏点,那么使用 git bisect start ,git bisert bad标记为坏的点,然后假设某个提交点是好的点, 那么使用git bisert good标记好的好的点,那么会自动检出中间的提交点,然后依次继续,当然也可以是用shell脚本实现自动化
4.git的存放区域
工作区:本地文件
暂存区:add后存放的区域
本地版本仓库:git commit后的本地版本仓库
远程仓库:
仓库的建立:
Github的创建:官网 https://github.com/ 创建账户 创建仓库,github的基本使用见github的基础入门笔记。
5.分支与合并
git checkout -b 分支名: -b表示创建并切换分支,相当于git branch 分支名(创建)加git checkout 分支名(切换)
git branch :查看所有的分支
git branch -a:参数可以查看远程分支,远程分支会用红色表示出来
git merge 分支名:将那条分支合并到当前分支上(master表示默认的支路)
分支上的添加和提交同master支路
merge合并的冲突:产生的原因,修改了同一个位置的内容,解决方法,修改产生冲突的文件后(vim i wq),add添加到暂存区,然后提交
冲突文件如下
git rebase 分支名:合并
rebase的合并冲突解决:rebase 遇见冲突后会暂停当前操作,开发者可以选择手动解决冲突,然后 git rebase --continue
继续,或者 --skip
跳过(注意此操作中当前分支的修改会直接覆盖目标分支的冲突部分),亦或者 --abort
直接停止该次 rebase 操作
rebase 跟 merge 的区别:
merge 是一个合并操作,会将两个分支的修改合并在一起,默认操作的情况下会提交合并中修改的内容
merge 的提交历史忠实地记录了实际发生过什么,关注点在真实的提交历史上面
rebase 并没有进行合并操作,只是提取了当前分支的修改,将其复制在了目标分支的最新提交后面
rebase 的提交历史反映了项目过程中发生了什么,关注点在开发过程上面
merge 与 rebase 都是非常强大的分支整合命令,没有优劣之分,使用哪一个应由项目和团队的开发需求决定
merge 和 rebase 还有很多强大的选项,可以使用 git help <command>
查看
注意:rebase 操作会丢弃当前分支已提交的 commit,故不要在已经 push 到远程,和其他人正在协作开发的分支上执行 rebase 操作
git branch –d 分支名 : 删除分支
git fetch:把远程服务器上所有的更新都拉取下来
git pull:把远程分支的代码拉取下来并合并到本地分支
git log --graph:更加友好的查看相应的历史信息
6.储存工作现场
git stash:储存工作现场
git stash list:查看保存过的现场
git stash apply stash版本 :还原到之前
git stash drop:删除最近的stash版本,也可以制动向右的stash版本
git stash pop:弹出最近的版本,后drop删除
git stash clear:清空暂存区的记录
7.标签
git tag 标签名:在相应的标签上标记标签名
git tag 标签名称 commitid:对历史版本添加标签
git tag -a 标签 -m "说明" commitid :-a表示指定版本号,-m指定说明
git tag:查看所有的标签
git tag -d :标签名
8.linux上git 服务器的搭建
添加ssh公钥,在~/.ssh/authorized_keys里添加客户端的公钥,一行一个,倘若没有相应的文件,可以新建mkdir ~.ssh
touch ~/.ssh/authorized_keys
9.在eclipse中使用
类似如上:add to index 相对linux 的git add ;commit相当于git commit;reset时光穿梭机,remote远程推送和取出,ignore忽略,rebase合并,merge合并,switch 同相当于git的创建和切换分支等