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
Initialized empty Git repository in /Users/michael/learngit/.git/

这样一来,Git就把仓库建好了,你会发现当前目录下多了一个.git的目录,这个文件默认是隐藏的,如果你创建好后没有看到这个目录,需要电脑设置显示隐藏的文件夹。

特别注意:这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。



首先用git add把文件修改添加到暂存区;
第二步用git commit提交更改,就是把暂存区的所有内容修改提交到当前分支;
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。


版本回退操作

要随时掌握工作区的状态,使用git status命令(查看工作区状态)。
如果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  master
git 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 里程碑管理


0 0
原创粉丝点击