git版本管理


创建git仓库

$ git config –global user.name”Weldon”
$ git config –global user.email”wxh199311@outlook.com”

$ git config –global user.name “Your Name”
$ git config –global user.email “email@example.com”

git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。


提交文件到仓库

  • 1.创建一个版本的仓库 $ git init
  • 2.写入文件 提交到仓库 $ git add (添加到暂存区)
    *3.提交到版本库 $ git commit -m “提交的描述,做了哪些操作” (把暂存区的文件提交到master分支),这个分支是git自己创建的

版本回退

  • $ git log 查看提交日志

    4ae77e214854da0e35b34043663e82737bd6e1ad 第三次修改了内容 前面是提交的ID

  • $ git log –pretty=oneline 美化输出信息

  • $ git reset –hard HEAD^ 回退到上一个版本 ^上一个版本
  • $ git reset –hard 4ae7 回退到提交的id是4ae7的文件状态
  • $ git reflog 记录了每一次的命令

工作区和暂存区

  • Untracked表示创建了但是没有提交到暂存区的文件的状态 文件从来没有被添加过
  • 每次修改,如果不add到暂存区,那就不会加入到commit中。
  • git diff HEAD –文件名 命令可以查看工作区和版本库里面最新版本的区别:

撤销修改

  • 没有提交到暂存区时 用git checkout – file (git checkout .)就可以撤销对工作区的修改

    git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令
    提交到暂存区修改时,可以回到提交到暂存区时的状态

  • 提交到暂存区 但是没有到仓库 git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:

    git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

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

删除文件

  • git rm 删除文件,想要找回删除的文件 可以使用git checkout – file
  • git rm file 删除版本库文件,删除之后不能找回

提交文档到github远程仓库

  • 1.$ ssh-keygen -t rsa -C “youremail@example.com” 获取电脑的SSH key 把id_rsa.pub中的内容提交到github的sshkey里面
  • 2.在github新建一个项目,本地执行$ git remote add origin git@github.com:name/file.git 和远程仓库进行绑定
  • 3.本地执行$ git push -u origin master 把本地当前的分支推送到远程仓库 即github上面

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

  • 4.从现在起,只要本地作了提交,就可以通过命令:$ git push origin master提交到远程仓库

远程仓库克隆

  • 1.$ git clone git@github.com:name/filesrc.git 本地执行命令可以克隆代码

    还可以用https://github.com/michaelliao/gitskills.git

    1. 提交操作和上面相同,默认就把本地仓库绑定了github的远程仓库

创建合并分支

  • 1.我们创建dev分支,然后切换到dev分支:

    1
    2
    $ git checkout -b dev
    Switched to a new branch 'dev'
  • 2.git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

    1
    2
    3
    $ git branch dev
    $ git checkout dev
    Switched to branch 'dev'
  • 3.git branch命令会列出所有分支,当前分支前面会标一个*号。

    1
    2
    3
    $ git branch
    * dev
    master
  • 4.改变文件之后提交,就会提交到dev分支进行提交,并且在master分支上没有任何改变

    1
    2
    3
    4
    $ git add readme.txt
    $ git commit -m "branch test"
    [dev fec145a] branch test
    1 file changed, 1 insertion(+)
  • 5.改变分支到master,会发现没有任何改变

    1
    2
    $ git checkout master
    Switched to branch 'master'
  • 6.现在,我们把dev分支的工作成果合并到master分支上:

    git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

    1
    2
    3
    4
    5
    $ git merge dev
    Updating d17efd8..fec145a
    Fast-forward
    readme.txt | 1 +
    1 file changed, 1 insertion(+)
  • 7.合并完成之后就可以删除分支

    1
    2
    $ git branch -d dev
    Deleted branch dev (was fec145a).

解决分支冲突

  • 1.如果创建的两条分支上都有内容提交的话,合并的时候必须手动处理冲突才能进行合并,具体的冲突文件会在文件中标出
  • 2.合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息

    如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

  • 3.准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward:

    $ git merge –no-ff -m “merge with no-ff” dev


bug分支

  • 1.Git还提供了一个stash功能,可以把工作现场暂时存储起来,等修复完bug之后继续工作
  • 2.首先把当前为保存的文件先寄存起来,修复完bug再继续工作

    git stash

  • 3.新建一条分支并跳转到这条分支

    git checkout -b issue-101

  • 4.修改完之后执行

    git add .

    git commit -m “进行了修改”

  • 5.回到主分支并把bug分支合并到主分支

    $ git checkout master //切换到主分支

    $ git branch -d issue-101 //把bug分支合并到主分支

  • 6.回到工作分支进行操作

    1
    2
    3
    4
    5
    $ git checkout dev
    Switched to branch 'dev'
    $ git status
    # On branch dev
    nothing to commit (working directory clean)

    会发现工作分支并没有任何需要操作的文件,我们需要执行命令查看我们寄存的工作文件

    1
    2
    $ git stash list
    stash@{0}: WIP on dev: 6224937 add merge

    我们发现我们的工作现场还在,只是git帮我们存储到了一个地方,我们恢复的时候有两种方法

    • 第一种方法

      git stash apply
      恢复后stash文件没有被删除,需要执行git stash drop来删除

    • 第二种方法

      git stash pop
      恢复的同时也会把stash文件删除掉

  • 7.最后我们执行git stash list会发现看不到stash的任何内容

  • pwd: 显示当前路由位置
  • git add :文件添加到仓库(git add .)
  • git commit:-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录
  • git status :查看仓库当前的状态(是否有变动的文件)
  • git diff:查看修改了哪些内容(只能查看未提交的内容)
  • git log: 查看提交的操作的日志
  • git log –pretty=oneline 美化输出信息
  • git reset –hard HEAD^ 回退到某一个个版本
  • git reflog 记录了每一次的命令
  • git checkout – file (git checkout .)就可以撤销对工作区的修改
  • git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:
  • 查看分支:git branch
  • 创建分支:git branch
  • 切换分支:git checkout
  • 创建+切换分支:git checkout -b
  • 合并某分支到当前分支:git merge
  • 删除分支:git branch -d