Git笔记

Git


写在前面

  万恶的SC,什么都要自己学,下面更多的是我学的东西的总结,有一篇很好的文章(点这里跳进去),远程谢谢博主!

简介

  Git可以理解为一个可以帮你把一个大项目中过去的版本上传到网上(Github)并且帮助管理的软件。
  Git是Linus用C花了两周的时间写出来的…
  版本控制系统分为两种,一种是集中式一种是分布式,集中式就是有一台中央服务器能完成不同贡献合并的工作,每次大家都只取一部分下来干。

集中式

  分布式是每个人都有一个完整的项目文件,然后自己写自己的,写完了相互传来传去,分布式系统会在这个过程中合并代码,其中可能有一个方便大噶传来传去的电脑(不干其他事,纯粹方便)。

分布式

常用命令

  在官网上面下就可以了,注意安装好之后要设置用户名和邮箱。

    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"

  现在开始建仓库了,先找到一个安静的地方,做出一个用于存放东西的目录,cd进这个目录(命令pwd可用显示于当前目录)。
  注意git中使用的工作区,暂存区和提交的概念。

git分区

  下面是常用命令

    git init
    /* 可以将一个目录转化为git仓库
    创建成功后会出现一个一个隐藏文件夹.git用于存放git信息*/

    git add
    /*1.可以将工作区的文件放入暂存区(stage)
    2.可以将未跟踪文件放入已跟踪文件*/

    git commit -m "提交内容"
    /*将所有暂存区里面的修改提交*/

    git status
    /*查看文件状态*/

    git diff 文件名
    /*查看未放入暂存区的修改*/
    git diff HEAD -- 文件名
    /*查看工作区文件和版本文件之间修改内容*/


    git log (--prety=oneline)
    /*查看修改日志*/

    git log --graph --pretty=oneline --abbrev-commit
    /*图形化查看分支*/

版本控制

  Git的版本控制相当于将不同的提交版本抽象为节点,HEAD指针指指向当前版本的节点,创建新节点,回退,FF模式下的合并只移动HEAD指针,所以非常快。

    git reset --hard HEAD~(数字x)
    git reset --hard HEAD^
    git reset --hard HEAD^^
    git reset --hard 版本号(git可以自动补全)
    /*第一个是回退x个版本,第二个是回退一个版本,第三个是回退两个版本
    --hard会清空暂存区,将版本的所有文件放入工作区*/

    git reflog
    /*记录了每一次命令,可以通过这个来找回之前的版本号*/

    git checkout
    /*用当前版本替换工作区中的内容*/

    git checkout -- file
    /*场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时*/

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

    /*场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节*/

    git rm file
    /*告诉git你真的删掉了一个文件*/

  更多reset回退方式点这里

远程仓库

  创建SSH-key,并且绑GitHub,id_rsa是私钥,id_rsa.pub是公钥

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

  Origin是远程仓库的名字,下面添加远程仓库的名字

    git remote add origin git@github.com:用户名/仓库名.git

  把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
  由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

    git push -u origin master

    git push -u origin master -f
    /*使用强制push,这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候*/

  从现在起,只要本地作了提交,就可以通过命令:

    git push origin master

  把本地master分支的最新修改推送至GitHub。

  从远程仓库克隆,下到自己的电脑上作为一个文件夹

    git clone git@github.com:用户名/仓库名.git

分支管理

  由于不完整的代码会给团队开发带来困难,破坏原来已经开发的东西很不划算,每个人在开发的时候会创建一个新的分支,在新的分支上开发完成之后再将自己的分支合并到主分支上。master分支最稳定,用于发布新版本,dev分支是开发的总分支,不同的人开发完成后将自己的分支合并到dev分支上,完成测试后再合并到master分支上.

开发模式

  git采用指针的形式,可以很快地创建和合并分支。创建分支dev,并且移动到dev上的命令

    git checkout -b dev
    /*git checkout命令加上-b参数表示创建并切换,相当于下面两条命令*/
    git branch dev
    git checkout dev

    git branch
    /*查看当前的分支*/

创建分支

  常用的分支控制命令

    git merge dev
    /*现在master分支上,要把dev合并到master分支上来
    git merge --no-ff -m "提交信息" dev
    禁用FF模式,可以添加合并信息*/

    git branch -d dev
    /*删除dev分支,-D 强行删除*/

    git log --graph
    /*分支合并图*/

  如果想把当前的工作区所有文件存起来还可以

    git stash
    /*将当前工作区所有文件存入临时栈中*/

    git stash list
    /*查看临时栈*/

    git stash pop
    /*弹出并删除顶层临时工作状态*/

    git stash apply stash@{编号}
    /*恢复特定编号的工作状态,不删除栈中工作状态*/

    git stash drop stash@{编号}
    /*删除特定编号的工作状态*/

Github

  在GitHub上,可以任意Fork开源仓库
  自己拥有Fork后的仓库的读写权限
  可以推送pull request给官方仓库来贡献代码

自定义Git

  在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。例如

    # Windows:
    Thumbs.db
    ehthumbs.db
    Desktop.ini

    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build

    # My configurations:
    db.ini
    deploy_key_rsa

  忽略后的文件无法被add,-f可以强制add

    git add -f App.class

  检查要add的文件被哪个ignore命令忽略了

    git check-ignore -v file.suffix

  可以自定义命令别名

    git config --global alias.自定义命令 "原来命令"

    /*我设置了下面两三个*/
    /*git 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"

    /*git glog*/
    git config --global alias.glog "log --graph --pretty=oneline --abbrev-commit"

    /*git st*/
    git config --global alias.st "status"

  配置Git的时候,加上–global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。每个仓库的Git配置文件都放在.git/config文件中。别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中。配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。
  原文里面还有教搭Git服务器的内容!