Git 入门

维基百科:git 是一个分散式版本控制软体,由Linus Torvalds创作,于2005年以GPL推出
开发动力来自对Linux核心采用来自BitKeeper的付费版本控制软件的不合,尽管BitKeeper母公司授权Linux社区免费使用该软件。其他的开源集中式版本控制系统如CVS/SVN则被Linus所不喜(集中式,速度慢且必须联网使用),于是Linus用了10天时间用C编写了分布式版本控制Git软件,其特点是不需服务器端软体,就可运行版本控制且速度很快,其中最出色的功能是合并追踪(merge tracing)。

简介

关于Git 的详细介绍可参见廖雪峰老师的Git介绍,有详细的比喻。

简要来说就是通过分布式版本控制,每个人电脑上都有一个完整的git版本库,自动记录每次文件及目录的改动,并提供协作编辑的能力(通过服务器实现修改的交换),可追踪多个版本的开发及维护工作,相比CVS/SVN等SCM(Software Configuration Managemen) 工具,有着cheap local branching, convenient staging areas, multiple workflows等优点,且不管是小项目还是大项目,都有很快的速度和极高的效率。

安装

从官网下载安装最新版本,旧版本在Github上可以找到。

使用

  1. git init
    在当前目录下创建版本库(.git目录下), git将用该目录来跟踪管理仓库(repository),该命令会创立唯一的master分支.
  2. git add sample.txt
    将文件sample添加到暂存区(stage或index),以便后续提交到分支中.
    每次修改后,必须用git add命令将修改添加到暂存区再提交.
    git commit -m "wrote a sample file"
    将文件提交到当前分支进行保存,-m后表示提交说明.
    可多次add不同文件,最后提交一次,类似选中多个后提交.
  3. git status
    掌握仓库当前的状态, 想了解文本文件详细的变化可用以下命令:
    git diff sample.txt
    列出文本文件所修改的地方,确认无误后,重新添加提交
    git add sample.txt
    git commit -m "modify some words"
    以上即是对文本修改后的重新提交至仓库,生成新版本
  4. git log
    显示从最近到最远的commit历史,将输出commit_id及提交说明。其中commit_id是由SHA-1校验和作为版本id.
    命令末尾可添加--pretty=oneline,输出简要的id及修改信息.
  5. git relog
    查看命令历史,可用于确定要回到未来的哪个版本.
  6. git reset --hard commit_id
    git通过HEAD指针指向commit的不同版本的Master分支, HEAD^可表示上个版本分支,类似HEAD^^HEAD~**,回退到上上个版本或往上100个版本.
  7. git checkout -- file.txt
    撤销对file的修改,回到上一次commit的状态,用版本库里的替换工作区的。
    checkout -b xxx 表示切换到其他分支
    小结:
    场景1:改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

  1. git remote add origin git@server-name:path/repo-name.git
    将本地仓库关联到一个远程仓库
    git remote -v将用于查看远程分支的信息.
  2. git push -u origin master
    将本地master分支与远程的master分支连接,并将本地所有提交推送到远程
    以上两步通常是远程库为空,将本地库推送到远程的步骤
  3. git clone [email protected]:repo-name.git
    从远程复制仓库到本地,clone仅仅将复制master分支。若要对其他分支进行操作,需要建立与远程分支一致的分支,例如
    git checkout -b dev origin/dev,后续pull,push进行推送即
    git branch --set-upstream-to=origin/ dev(链接本地与origin)
    git pull (注:若有冲突需要先解决冲突再commit后进行push)
    git push origin/dev
    注:从Github上获取clone的地址。
    地址有两种,一种是SSH,一种HTTPS
    HTTPS除了速度慢,每次推送都必须输入口令,在某些只开放HTTP端口的公司内部就无法使用ssh协议而只能用https,而通过SSH支持的原生Git协议速度最快。
  4. git branch
    用于查看当前的分支
    git branch name
    创建name分支
  5. git merge branchA
    将指定branchA分支合并到当前所在分支
    合并有Fast-forward模式,即将当前分支指针指向指向指定的提交,将不保留分支信息,即看不出进行过合并.
    若通过--no-ff禁用Fast-forward模式,Git将通过新建commit进行提交以保留分支信息,即git merge --no-ff -m "merge with no-off" A
  6. git branch -d branchA
    删除branchA
    git branch -D
    将强制删除,适用于删除一个没有被合并过的分支
  7. git log --graph
    显示分支合并图
    小结:
    通常实际中,master分支十分稳定,通过派生出的dev分支进行开发工作,每个人在自己的dev分支上进行开发新功能,再将新功能合并到dev分支上,大版本更新时将dev分支合并到master分支,在master分支上发布新的大版本.
  8. git stash
    将当前工作状态保存后留待后续使用,提供干净的环境,以便处理新的紧急情况
  9. git stash list
    列出保存的工作状态
  10. git stash pop or git stash apply git stash drop
    恢复有两种方式,pop将恢复并删除stash,apply恢复但不删除而通过drop进行删除
  11. git rebase
    将本地未push的分支提交历史整理为直线,使我们查看历史提交更容易,缺点是本地的分叉提交被修改过。
  12. git tag v1.0
    给当前分支取标签,便于记忆及使用,默认是在当前分支最新提交上commit上打标签,即有该commit的分支均可看到该标签
    git tag v0.9 commit_id
    对某个commit打标签
    git show tag_name
    显示标签信息
    git tag
    显示所有的标签
    git tag -d tag_name
    从本地删除某个标签,然后从远程删除git push origin :refs/tags/tag_name
    git push origin tag_name
    推送某个标签到远程, push origin --tags将推送所有未推送过的标签

你可能感兴趣的:(Git 入门)