Git 基础笔记整理1
Git 官网:http://git-scm.com/
git教程1:http://www.yiibai.com/git/home.html
git教程2 :http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000
工具:SourceTree
1,Git版本库 初始化
初始化一个Git仓库,使用git init命令。
2,添加文件到Git仓库
分两步:
第一步,使用命令
git add <file>,注意,可反复多次使用,添加多个文件;第二步,使用命令
git commit -m "说明文字",完成。- 补充:
 
git add -Astages Allgit add .stages new and modified, without deletedgit add -ustages modified and deleted, without new
3, git 状态查看
要随时掌握工作区的状态,使用
git status命令。 git status -s ,显示精简格式的状态输出。如果
git status告诉你有文件被修改过,用git diff可以查看修改内容- 用
git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别 
4,git 版本
- 在Git中,用
HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。 
- 因此,Git允许我们在版本的历史之间穿梭,使用命令
git reset --hard commit_id (回退到某一个版本)。 
    $ git reset --hard HEAD^
    HEAD is now at ea34578 add distributed
穿梭前,用
git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用
git reflog查看命令历史,以便确定要回到未来的哪个版本。- 精简输出日志: git log --pretty=oneline
 
5,
1) git checkout -- file可以丢弃工作区的修改   //  --很重要,没有--,就变成了“创建一个新分支”的命令
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
2) 删除文件
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt
6,要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
7,创建分支:
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
Git鼓励大量使用分支: Git鼓励你使用分支完成某个任务,合并后再删掉分支,因为这样更安全。
查看分支:git branch  :git branch命令会列出所有分支,当前分支前面会标一个*号。
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>   
合并某分支到当前分支:git merge <name>    // git merge命令用于合并指定分支到当前分支。
删除分支:git branch -d <name>
强行删除:git branch -D <name>   //开发一个新feature,最好新建一个分支;如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
查看服务器端分支情况 :git branch -r
8, 分支冲突
1)Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图
eg:
$ git log --graph --pretty=oneline --abbrev-commit
*   59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...
eg:
$ git merge dev
Updating d17efd8..fec145a
Fast-forward     //这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快
 readme.txt |    1 +
 1 file changed, 1 insertion(+)
2)合并分支
 git merge --no-ff -m "merge with no-ff" dev
--no-ff参数,表示禁用Fast forward;加上-m参数,把commit描述写进去;
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
 
9, 分支管理
 git stash  //可以把当前工作现场“储藏”起来
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
git stash list
第一种方式恢复现场: git stash apply 恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
第二种方式: git stash pop,恢复的同时把stash内容也删了:
恢复指定的stash,用命令: $ git stash apply stash@{0}
 
10, 多人协作的工作模式通常是这样:
首先,可以试图用
git push origin branch-name推送自己的修改;如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull试图合并;如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用
git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
git branch --set-upstream dev origin/dev
这就是多人协作的工作模式,一旦熟悉了,就非常简单。
11,标签
命令
git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;git tag -a <tagname> -m "blablabla..."可以指定标签信息; //-a指定标签名,-m指定说明文字git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;命令
git tag可以查看所有标签。- git show <tagname> 查看标签信息
 
标签不是按时间顺序列出,而是按字母排序的
命令
git push origin <tagname>可以推送一个本地标签;命令
git push origin --tags可以推送全部未推送过的本地标签;命令
git tag -d <tagname>可以删除一个本地标签;命令
git push origin :refs/tags/<tagname>可以删除一个远程标签。- 删除远程标签,先本地删除,再远程删除
 
12,自定义Git
1) git config --global color.ui true  //让Git显示颜色,会让命令输出看起来更醒目
2) 忽略特殊文件
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。
所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
 - 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的
.class文件; - 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
 
13, git remote
为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。
不带选项的时候,git remote命令列出所有远程主机。
$ git remote
origin
使用-v选项,可以参看远程主机的网址。
$ git remote -v
origin git@github.com:jquery/jquery.git (fetch)
origin git@github.com:jquery/jquery.git (push)
上面命令表示,当前只有一台远程主机,叫做origin,以及它的网址。
克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
$ git clone -o jQuery https://github.com/jquery/jquery.git
$ git remote
jQuery
上面命令表示,克隆的时候,指定远程主机叫做jQuery。
git remote show命令加上主机名,可以查看该主机的详细信息。
$ git remote show <主机名>
git remote add命令用于添加远程主机。
$ git remote add <主机名> <网址>
git remote rm命令用于删除远程主机。
$ git remote rm <主机名>
git remote rename命令用于远程主机的改名。
$ git remote rename <原主机名> <新主机名>
 
 												
											Git 基础笔记整理1的更多相关文章
- Git学习笔记整理【图像解析、基础命令、分支、远程仓库】
		
Git别名设置:https://www.cnblogs.com/hero123/p/9105381.html Git远程项目公钥配置:https://www.cnblogs.com/hero123/p ...
 - 知了课堂 Python Flask零基础 笔记整理
		
目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...
 - HTML基础笔记整理
		
「学习笔记」HTML基础 前言 勤做笔记不仅可以让自己学的扎实,更重要的是可以让自己少走弯路.有人说:"再次翻开笔记是什么感觉",我的回答是:"初恋般的感觉". ...
 - web基础笔记整理(一)
		
一.程序的分层 1.界面层: 某种类型的应用程序 a.DOS(控制台运行) b.桌面应用程序--独立安装,独立运行 c.web类型--现在流行的 单机版:电脑上要安装,程序升级之后,电脑上也要升级-- ...
 - git常用笔记整理
		
Git 什么是Git 初始化 guthub创建sshKey 下载 上传 更新 创建切换分支 删除分支 合并分支 查看命令历史|提交历史 撤回 设置用户名和密码 查看配置信息 强制pull 强制push ...
 - Git基础--笔记
		
0.取的项目的git仓库 有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库. 第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来 1.在工作目录 ...
 - git基础命令整理
		
首先安装git,然后选择一个文件夹做初始化!! yum -y install git ### 安装 git init ...
 - java概念基础笔记整理
		
1.构造方法没有类型,有类型的不是不叫构造方法. 2.一个类的的成员变量可以是java允许的任何数据类型,一个类可以把某个对象作为自己的一个成员变量,如果用这样的类创建对象,那么该对象中就会其他对象, ...
 - 从0开始学Swift笔记整理(五)
		
这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...
 
随机推荐
- element  表格元素 超链接
			
1.在循环体中的事件绑定 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
 - webstorm添加调试nodejs
			
打开run菜单选择Edit Configurations 展开defaults菜单,选择nodejs 点击+按钮,选择Node.js,出现下面弹出框. 点击ok保存
 - Hadoop自学笔记(三)MapReduce简单介绍
			
1. MapReduce Architecture MapReduce是一套可编程的框架,大部分MapReduce的工作都能够用Pig或者Hive完毕.可是还是要了解MapReduce本身是怎样工作的 ...
 - python中operator.itemgetter函数
			
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. k = [,,] b = ) print(b(k)) #输 ...
 - Python中如何获取类属性的列表
			
这篇文章主要给大家介绍了在Python中如何获取类属性的列表,文中通过示例代码介绍的很详细,相信对大家的学习或者工作具有一定的参考借鉴价值,有需要的朋友可以参考借鉴,下面来一起看看吧. 前言 最近工作 ...
 - PAT Radix[二分][进制转换][难]
			
1010 Radix (25)(25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 ...
 - [LeetCode] 102. Binary Tree Level Order Traversal_Medium tag: BFS
			
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
 - Oracle获取数据库中的对象创建语句
			
使用dbms_metadata.get_ddl()函数可以做到. 实验环境:Oracle 11.2.0.4 以获取jingyu用户下的T1表为例: SQL> conn jingyu/jingyu ...
 - POI导出EXCEL经典实现(转)
			
http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基 ...
 - cf428c  模拟题
			
这题说的是给了 n个数然后又 k次 的交换任意位置的 数字的机会 计算最长的连续子序列的和 这要撸 模拟整个 过程 并不能就是算最长的递增序列 如果只是 找最长的 和序列的 话 会存在 很多问题 ...