git学习
来源:互联网 发布:sketch mac汉化破解版 编辑:程序博客网 时间:2024/05/21 06:47
Git是分布式版本控制系统
SVN是集中式版本控制系统(速度慢,而且必须联网才能使用)
GitHub网站是为开源项目免费提供Git存储
集中式版本控制系统,版本库是集中存放在中央服务器的,我们工作的时候,需要先从中央服务器取得最新的版本,然后我们自己的工作完成了,再把自己的工作推送到中央服务器。集中式版本控制系统最大的缺点就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,工作效率会很低。
对于分布式版本控制系统而言,根本没有中央服务器,我们每个人的电脑里面都有一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。我们每个人电脑上都有一个完整的版本库,我们只需要把各自的修改推送给对方,就可以进行协作,互相看到对方的修改了。
git创建版本库
1.首先,选择一个合适的地方,创建一个空目录:
$ mkdir learngit //创建一个空文件夹
$ cd learngit
$ pwd
/
Users/michael/learngit
pwd
命令用于显示当前目录
2. 通过git init
命令把这个目录变成Git可以管理的仓库:
$ git init
Initializedempty
Gitrepository
in/
Users/michael/learngit/.git/
这样一来,Git就把仓库建好了,你会发现当前目录下多了一个.git
的目录,这个文件默认是隐藏的,如果你创建好后没有看到这个目录,需要电脑设置显示隐藏的文件夹。
特别注意:这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
首先用git add把文件修改添加到暂存区;
第二步用git commit提交更改,就是把暂存区的所有内容修改提交到当前分支;
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
版本回退操作
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
现在假设提交了好多次,如何进行版本回退?
首先,使用git log命令显示从最近到最远的提交日志,如果嫌git log输出的信息太多,看的眼花缭乱,可以使用$ git log --pretty=oneline。通过这个命令,我们可以知道相应的版本号(commit id)。
每提交一个新版本,实际上Git就会把他们自动串成一条时间线。
要想进行版本回退,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
回退到上一个版本:$ git reset --hard HEAD^回退到上上一个版本:$ git reset --hard HEAD^^
在进行了版本回退,回退到之前的版本之后,如果想再回到回退之前的版本,可以这样:
$ git reset –hard [commit id]
注意:commit id通常比较长,但是我们在使用的时候只需要输入前几位就可以了,git可以帮我们自动去找到对应的具体commit id。(这里的前提条件是:上面的命令行窗口还没有被关掉,你就可以顺着往上找到那个相应的commit id)
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是改变了HEAD的指向(上面说到过,每提交一个版本,git就会把它们自动串成一条时间线,所以改变HEAD的指向是很方便的)。最后HEAD指向哪个版本号,你就把当前版本定位在哪。
另外一种情况:你回退到了某一个版本,关掉了电脑,但是第二天早上你后悔了,想恢复到新版本怎么办?这就需要找到新版本的commit id。git通过git reflog来记录每一次命令。我们可以通过这一命令来找到我们想要的commit id。
找到之后,使用$ git reset –hard [commit id]就可以回到相应的版本了。
总结:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
管理修改
假设你对一个文件进行如下操作:第一次修改->git add->第二次修改->git commit
你进行上面的操作后,你会发现只是将第一次修改提交了,第二次修改不会提交。
这是因为:git commit只负责把暂存区的修改提交。我们在第二次修改之后,并没有将这次修改放入暂存区中。对于这种情况:我们可以将所有的修改放到暂存区,然后,使用git commit一次性把暂存区的所有修改提交到分支上。或者git add一次git commit一次。
即:第一次修改->git add->git commi->第二次修改-> git add->git commit
撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file(file即操作的文件,比如说test.txt)。场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作(当我们用HEAD时,表示最新的版本)。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,这就需要用到版本回退了,不过前提是没有推送到远程库。
删除文件
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:$ rm test.txt
另一种情况:要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
$ git rm test.txt
$ git commit -m "remove test.txt"
现在,文件就从版本库中被删除了。
当我们误删了本地文件,因为版本库里还有,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原。
远程仓库
要关联一个远程库,使用命令git remote add origin 远程仓库地址;关联后,使用命令git push -u origin master第一次推送(要加u)master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
克隆远程仓库:git clone 远程仓库地址
分支管理
创建并合并分支$ git checkout -b dev
相当于:
$ git branch dev
$ git checkout dev
然后,用git branch命令查看当前分支:
$ git branch
* dev mastergit branch命令会列出所有分支,当前分支前面会标一个*号
当dev分支上的工作完成后,我们就可以切换回master分支:$ git checkout master
我们把dev分支的工作成果合并到master分支上:$ git merge dev
合并完成后,就可以放心地删除dev分支了:
$ git branch -d dev
删除后,查看branch,就只剩下master分支了:
$ git branch
* master
分支命令汇总
查看分支:git branch创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突
当多个人对同一个文件进行修改时,在提交的时候可能出现代码冲突问题。出现这种情况,首先手动解决冲突,然后再提交,合并完成。命令 简要说明git add 添加至暂存区git add–interactive 交互式添加git apply 应用补丁git am 应用邮件格式补丁git annotate 同义词,等同于 git blamegit archive 文件归档打包git bisect 二分查找git blame 文件逐行追溯git branch 分支管理git cat-file 版本库对象研究工具git checkout 检出到工作区、切换或创建分支git cherry-pick 提交拣选git citool 图形化提交,相当于 git gui 命令git clean 清除工作区未跟踪文件git clone 克隆版本库git commit 提交git config 查询和修改配置git describe 通过里程碑直观地显示提交IDgit diff 差异比较git difftool 调用图形化差异比较工具git fetch 获取远程版本库的提交git format-patch 创建邮件格式的补丁文件。参见 git am 命令git grep 文件内容搜索定位工具git gui 基于Tcl/Tk的图形化工具,侧重提交等操作git help 帮助git init 版本库初始化git init-db* 同义词,等同于 git initgit log 显示提交日志git merge 分支合并git mergetool 图形化冲突解决git mv 重命名git pull 拉回远程版本库的提交git push 推送至远程版本库git reBase 分支变基git rebase–interactive 交互式分支变基git reflog 分支等引用变更记录管理git remote 远程版本库管理git repo-config* 同义词,等同于 git configgit reset 重置改变分支“游标”指向git rev-parse 将各种引用表示法转换为哈希值等git revert 反转提交git rm 删除文件git show 显示各种类型的对象git stage* 同义词,等同于 git addgit stash 保存和恢复进度git status 显示工作区文件状态git tag 里程碑管理
- 【git】git学习笔记
- 【Git】Git学习手册
- Git学习 -- Git 安装
- Git学习-GIT安装
- 【Git学习】git常用命令
- git学习:git常用命令
- git 学习
- git 学习
- Git学习
- Git 学习
- GIT学习。
- git学习
- Git 学习
- git 学习
- Git学习
- Git学习
- git 学习
- git学习
- mac下更新pip时提示OSError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/pip-8.0.2-py2.
- Grunt
- 基础6
- c++编译器对多态的实现原理总结
- HUST 1599 (找规律)
- git学习
- Linux 如何查看进程的各线程的CPU占用
- 公共技术点之 Java 反射 Reflection
- 深入FFM原理与实践
- HDOJ-1754 I Hate It
- os send,receive 实现
- Swift UIColor Extension (扩展)
- 二维数组的传参问题!!!
- 获取腾讯企业邮箱通讯录python脚本(带登录功能)