git学习笔记

Git是什么

Git是目前世界上最先进的分布式版本控制系统,重点是它不仅开源而且免费!当多个开发人员协调工作时,能有效监听修改历史,且可以离线操作,受众非常广。

Git的安装和设置

下载并安装Git,去Git官网下载windows下面的最新版本即可(本人电脑是win7 32位)。接下来一直点next安装,若有疑问也可去网上搜安装教程。

安装完成后,鼠标右键会出现下图,点击Git Bash,会跳出一个命令行窗口。
avatar
命令行窗口如下:
avatar
安装完成后设置用户名和邮箱

1
2
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com" //--global参数表示这台机器上所有的仓库都会使用这个配置

Git的操作

创建仓库

创建版本库即创建仓库(reposity)

1
2
3
$ mkdir xx           //创建一个新的文件夹
$ cd xx //进入这个新建的文件夹
$ pwd xx/xx/xx //显示当前仓库位于何处(即当前的目录)

注意: 请确保所有的目录名都不包含中文

初始化仓库

1
$ git init

git init命令可以把新建的文件夹变成git可以控制管理的仓库。

提交文件到仓库

  1. git add 添加文件到仓库

    1
    2
    $ git add 文件名   //添加某个指定的文件
    $ git add . //添加全部文件
  2. git commit 把文件提交到仓库

    1
    $ git commit -m "此处为提交的内容说明"

查看状态

git status命令可以告诉我们当前的仓库状态,如是否有文件被修改、是否有未提交的文件等。
但是git status只能告诉我们仓库的状态,若是想知道当前仓库具体发生了那些改变需要用git diff命令,他可以告诉我们详细的修改内容。

1
2
$ git status       //查看仓库状态
$ git diff //查看详细的修改内容

git log命令可以告诉我们所有的详细的历史操作记录。
git log –pretty=oneline 命令会显示精简版的历史操作记录。

1
2
$ git log   //显示从最近到最远的提交日志(提交历史),比较详细
$ git log --pretty=oneline //显示从最近到最远的提交日志(提交历史),简略

版本回退

在Git中,用HEAD来表示当前版本,HEAD^表示还是那个一个版本,那么上上一次版本就是HEAD^^。
版本的回退命令是 git reset。

1
$ git reset --hard HEAD^    //回退到上一个版本

若是想回到原来的版本(即原来的HEAD版本),需要用git reflog命令,他可以记录你的每一次命令。
在git reflog命令下找到你想要的版本的commit id后用git reset –hard commit id 命令即可返回。

1
2
$ git reflog                  //显示你所有的命令历史
$ git reset --hard commit_id //利用commit id 回到想要回到的版本

撤销修改

  1. git checkout –文件名称 可以丢弃工作区的修改,让这个文件回到最后一次git commit或者git add的状态。
    注意:此命令是丢弃工作区的修改,即修改的文件还没有git add或者git commit。

    1
    $ git checkout -- 文件名称
  2. 修改过但是你不想要的文件已经Git add到暂存区,但并没有git commit
    用命令git reset HEAD file可以把暂存区的修改撤销掉,重新放回工作区

    1
    2
    4 git reset HEAD 文件名    //把暂存区的东西回退到工作区
    $ git checkout -- 文件名 //丢掉工作区的修改

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

  3. 若是已经Git commit了,直接版本回退即可。

文件删除

1
$ rm 文件名     //直接删除文件

远程仓库

本地推送到远程

  1. 注册github账号。
  2. 生成并设置密匙,新建github仓库。
  3. 运行如下命令将本地仓库和远程仓库关联。

    1
    $ git remote add origin git@github.com:你的用户名/你的仓库名.git
  4. 通过如下命令将本地库的内容推送到远程库

    1
    $ git push -u origin master  //只有第一次推送时候才需要-u

远程克隆至本地

  1. 新建github仓库并选择Initialize this repository with a README。
  2. 使用如下命令将远程仓库克隆至本地:
    1
    $ git clone git@github.com:你的账户名/你的仓库名.git

分支管理

创建并应用分支

使用如下命令创建并切换至分支dev

1
$ git checkout -b dev

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

1
2
3
$ git branch dev       //创建新分支
$ git checkout dev //切换至新分支
Switched to branch 'dev'

然后,用git branch命令查看当前分支,这个命令会列出所有分支,当前分支前面会标一个*号。

1
2
3
$ git branch
* dev
master

切换回master分支

1
$ git checkout master

将分支dev的工作成果合并到master分支上,当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

1
$ git merge dev   //git merge命令用于合并指定分支到当前分支

注意:通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward:

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

合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。


删除dev分支

1
$ git branch -d dev

用git log –graph命令可以看到分支合并图。


命令总结
查看分支:git branch

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

删除分支:git branch -d

分支的临时存储

Git提供了一个stash功能,可以把当前进行中的工作存储起来以备后续。

1
$ git stash

用stash list可以查看分支的储存地址

1
$ git stash list

用git stash apply恢复,但是恢复后,stash内容并不删除.
用git stash pop,恢复的同时把stash内容也删了。

1
2
$ git stash apply  //恢复后不删除stash
$ git stash pop //回复的同时删除stash