Git命令整理

来源:互联网 发布:html5 css3实例源码 编辑:程序博客网 时间:2024/06/09 23:50

廖雪峰老师的git教程笔记,网址

Git简介

  • 概念:分布式版本控制系统。
  • 集中式:CVS, SVN
    从中央服务器获取内容,完成任务后再推送给中央服务器。缺点:必须联网,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,就会很难受; 依赖于中央服务器。

    集中式

  • 分布式:Git
    没有中央服务器,每个人的电脑都是一个完整的版本库。多人协作时,只需要把各自的修改推送给对方就可以了。

    分布式

安装Git

  1. Linux
    Ubuntu或者Debian,输入命令sudo apt-get install git, 其他版本的Linux安装git,需要先从git官网下载源码,解压后,依次输入./config,make,sudo make install 来进行安装。
  2. Windows
    安装msysgit是Windows版的Git,从https://git-for-windows.github.io下载,然后按默认选项安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

  3. 设置git
    安装完成后,还需要最后一步设置,在命令行输入:

    $ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"
    • $ git config --global color.ui true 让git显示颜色

具体的配置可以参考自定义git

版本仓库

本地版本库

初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:

  • 第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;
  • 第二步,使用命令git commit -m "message",提交多次添加的内容,-m后面的信息是修改的内容。

远程仓库

注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:

  • 第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

  • 第2步:登陆GitHub,打开“Account settings”,“SSH Keys” 页面:
    然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

添加远程仓库和克隆

  • 在你的github上创建一个仓库,仓库名跟本地仓库一致
  • git remote add origin your repository address 关联远程仓库,origin是Git默认的远程仓库的名字,后面的内容是github上面的仓库地址,例如ssh类型: git@github.com:XueqiangChen/Thinking_in_java.git或者https形式:https://github.com/XueqiangChen/Thinking_in_java.git
  • git push -u origin master 关联成功后,使用该命令第一次推送master分支的所有内容
  • 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
  • 克隆远程仓库:git clone 远程仓库ssh/https地址

工作区与暂存区

  • 工作区:就是你在电脑下能看到的目录,比如learngit文件夹就是一个工作区。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
  • 暂存区:Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

    git add 操作命令是将内容保存到暂存区,,多次添加,添加的内容都在暂存区中。git commit的命令会将暂存区中的内容一次性提交到分支,暂存区中就没有内容了。

版本回退

git 中每次提交一个版本,就会把他们串成一条时间线。Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向不同的版本,然后顺便把工作区的文件更新了。所以head指针在哪里,当前的版本就是哪一个。

  • git reset --hard HEAD^ 从当前版本回退到上一个版本,上上一个版本可以使用HEAD^^,回退100个版本,可以写成HEAD~100
  • git reset --hard 3628164 前进到下一个版本,后面的数字指的是版本号,在git reflog中可以查找到

撤销修改

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

删除

git rm 用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,可以通过git checkout -- file来还原,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

查看命令

  • git status 查看当前仓库的状态,可以知道有哪些文件被修改过,待添加的文件
  • git diff 查看修改的具体内容
  • git log 查看历史记录,可以查看到最近到最远的记录,默认显示三条记录
  • git log --pretty=oneline 简化历史记录的显示信息,使显示内容放在一行,显示的内容里有类似d416...ebb9这样的字符串,指的是commit id,每次提交都会产生一个id
  • git reflog 查看你使用过的每一个命令,可以帮助进行版本的前进
  • git diff HEAD -- readme.txt 命令可以查看工作区和版本库里面最新版本的区别

分支管理

分支的创建与合并

  • git branch 查看当前分支

    $ git branch * master *表示的是当前分支
  • git branch <name> 创建分支
  • git checkout <name> 切换分支
  • git checkout -b <name> 创建加切换分支
  • git merge <name> 合并某分支到当前分支
  • git branch -d <name> 删除分支
  • git branch -D <name> 如果要丢弃一个没有被合并过的分支,可以通过该命令强行删除

解决冲突

在两个分支上修改同一个文件后,想要合并这两个分支,就会出现冲突的现象,为了顺利合并分支,需要通过查看不同分支的修改内容,去除重复或者不需要的内容来合并分支。

  • git log --graph 命令可以看到分支合并图。
  • git log --graph --pretty=oneline --abbrev-commit 查看具体的分支合并情况

分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

  • git merge --no-ff -m "merge with no-ff" dev 表示在分支合并时禁用Fast forward模式

分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:

Bug修复

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

  • git stash 把当前的工作现场“储藏”起来,等以后恢复现场后继续工作
  • git stash list 查看保存的工作现场
  • git stash apply 指定保存的工作现场 恢复工作内容,但是不删除缓存的stash
  • git stash drop 删除缓存的工作现场内容
  • git stash poop 恢复工作内容的同时删除stash的内容

多人协作

  • git remote -v 查看远程库的详细信息;
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 如果git pull提示”no tracking information”, 就需要建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

标签管理

  • git tag <tagname> 用于新建一个标签,默认为HEAD,也可以指定一个commit id
  • git tag 查看所有标签
  • git tag -a <tagname> -m "blablabla..." 可以指定标签信息
  • git tag -s <tagname> -m "blablabla..."可以用PGP签名标签
  • git show <tagname> 查看标签信息
  • git tag -d <tagname> 删除标签
  • git push origin <tagname> 推送某个标签到远程
  • git push origin --tags 一次性推送全部尚未推送到远程的本地标签
  • 如果标签已经推送到远程,先从本地删除,然后从远程删除,使用git push origin :refs/tags/<tagname> 命令

Git Cheat Sheet

参考文档Git Cheat Sheet

声明

  • 本站网址:http://chenxq.me
  • 联系作者 @Chenxq
  • 如需转载,请先阅读 「 ©️版权声明 」