知向前端
若是英雄又怎能不用git
2016-5-2 Jon
写在前面

  生命在于运动,学习在于总结。

  先安利下(廖雪峰 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  这几天在学git,百度各种教程感觉都对不上号,缺胳膊少腿的,历史总是那么偶然,发现了这个教程,讲的很细,适合新手学习,在此教程上进行精简提炼,放此便于日后查看。

0、历史

  Linus在1991年创建了开源的Linux后,为了方便管理而创建了Git

  2008年,GitHub网站上线,它为开源项目免费提供Git存储

1、相较于svn

  svn是集中式的版本控制系统:有中央服务器、必须联网才能工作

  git是分布式版本控制系统:无中央服务器、在本地即可编辑、安全性高、强大的分支管理、跟踪并管理的是修改,而非文件。

2、windows下载安装:

  下载地址https://git-for-windows.github.io/或者360云盘下载

  按照默认安装即可(可改下安装目录)

  安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

  配置用户名邮箱:

    git config --global user.name "Your Name"

    git config --global user.email "email@example.com"

  “--global”代表所有git仓库都是用这个配置

3、创建版本库(又名仓库,英文名repository)

  1)、找个合适的地方创建目录(一般不要选择c盘)

    在当前目录按住shift然后鼠标右键打开

    mkdir haha

    cd haha

    pwd

    /f/git/haha

    pwd命令用于显示当前目录。

  2)、通过git init命令把这个目录变成Git可以管理的仓库

    git init

  3)、将文件添加到版本库

    git add test.txt

    放到暂存区

  4)、将文件提交到仓库

    git commit -m "这是提交的说明"

    提交到master分支

  5)、查看当前状态

    git status

  6)、查看上次修改过的差异

    git diff test.txt

  7)、查看历史提交记录

    git log

    git log --pretty=oneline

  8)、回退到上一个版本

    git reset --hard HEAD^

    HEAD表示当前版本 ^表示上一个,^^表示上上一个,HEAD~100表示第上100个

  9)、查看文件内容

    cat test.txt

  10)、回到未来的某个版本

    git reset --hard 3628164(这个是id号前几位)

  11)、查看所有的版本号

    git reflog

  12)、工作区:电脑里能看到的目录

  13)、丢弃工作区的修改

    git checkout -- test.txt

  14)、暂存区的修改撤销掉

    git reset HEAD readme.txt

  15)、命令行删除文件

    rm test.txt

    删除已提交的文件

    git rm test.txt

4、远程仓库

  1)、创建SSH Key

    在C:\Users\Administrator下面

      有没有.ssh目录,.ssh里面有没有id_rsa和id_rsa.pub两个文件

    如果没有:就创建SSH Key:

      ssh-keygen -t rsa -C "youremail@example.com"

  2)、登录GitHub

    SSH and GPG keys->New SSH key

      填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容

  3)、创建仓库

    右上角New repository

    Repository name(最好有意义的名字这里写demo)

    其他选项默认点create repository

  4)、根据GitHub上的提示可以在本地通过

    git remote add origin git@github.com:yinuocode/demo.git

    git push -u origin master

    来完成推送

    后面修改在往这个库里推送就可以直接

    git push origin master

  5)查看远程库消息

    git remote或者

    git remote -v(更详细)

5、克隆到本地

  git clone git@github.com:yinuocode/demo.git(推荐)

  或者git clone https://github.com/Ceryn/img.git

6、分支管理

  1)创建dev分支

    git checkout -b dev

    git checkout命令加上-b参数表示创建并切换相当于

    git branch dev

    git checkout dev

  2)分支切换

    git checkout dev

  3)查看当前分支

    git branch

    会列出所有分支,前面带*号的为当前分支

  4)分支合并

    git merge dev(用于合并指定分支到当前分支)

  5)删除分支

    git branch -d dev

  6)分支冲突

    如果两个分支改的一个文件合并分支时会有冲突

    需要手动改下后重新添加提交

  7)可查看分支的历史合并情况

    git log --graph或者

    git log --graph --pretty=oneline --abbrev-commit

  8)普通模式合并分支(保留历史)

    git merge --no-ff -m "merge with no-ff" dev

  9)Bug分支

    把当前工作现场“储藏”起来,等以后恢复现场后继续工作

    git stash

    查看保存的工作现场

    git stash list

    恢复保存的工作现场两种方法

    1、git stash apply

       git stash drop

    2、git stash pop

  10)强行删除未合并的分支

    git branch -D 分支名

  11)将分支推送到服务器(只推送服务器需要的)

    推送时需指定本地分支

    git push origin master

    git push origin dev

    git push origin 某某分支

  12)clone服务器代码后想在dev上开发

    git checkout -b dev origin/dev

  13)git pull失败(未指定当前分支与远程分支的链接)

    git branch --set-upstream dev origin/dev

  14)多人协作的工作模式流程

     首先,可以试图用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。

7、标签管理

  1)标签定义和作用

    标签也是版本库的一个快照,可以根据某个标签取出当时历史版本

  2)创建标签

    切换到需要打标签的分支上git tag v2.0

    给之前的某个状态打标签

      通过git log --pretty=oneline --abbrev-commit获得需要的id

      $ git tag v1.0 6224937

  3)查看所有标签(按字母排序)

    git tag

  4)查看标签信息

    git show v1.0

  5)删除标签

    git tag -d v1.0

  6)将标签推送到服务器

    推送某个标签:git push origin v1.0

    一次性推送全部尚未推送的本地标签:git push origin --tags

  7)删除远程标签

    先删除本地标签然后执行(v2.0标签名)

    git push origin :refs/tags/v2.0

8、使用GitHub

    参与GitHub上的项目:

    到项目主页-Fork-从自己账号下clone-修改-推送到自己仓库-发起一个pull request

9、自定义Git

  1)忽略特殊文件

    放到git工作目录,又不需提交

    需要加上.gitignore文件,并将忽略文件名填进去

    https://github.com/github/gitignore

  2)配置别名

    简化命令单词

    git config --global alias.st status

    当敲git st就等于敲git status

    以下同理

    git config --global alias.co checkout

    git config --global alias.ci commit

    git config --global alias.br branch

    --global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。

    git config --global alias.unstage 'reset HEAD'

    git unstage test.py==git reset HEAD test.py

    配置git last,显示最后一次提交信息:

    git config --global alias.last 'log -1'

    甚至还有人丧心病狂地把lg配置成了:

    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

  3)配置文件

    每个仓库的Git配置文件都放在.git/config文件中

    别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。

    而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:

  4)搭建Git服务器

    准备Linux机器,通常10分钟即可完成

    要方便管理公钥,用Gitosis

    要像SVN那样变态地控制权限,用Gitolite

参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容