Git 学习笔记

根据廖雪峰的官方网站整理,原网链接:http://www.liaoxuefeng.com

下载与安装

下载

Windows版的Git可以从以下链接下载:点我开始下载

安装

安装 Git

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

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

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

配置 Git

忽略特殊文件

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

# Windows:
ehthumbs.db
Desktop.ini

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

#My configurations: >db.ini
deploy_key_rsa

配置文件可参考:https://github.com/github/gitignore

使用配色
$ git config --global color.ui true
配置别名
$ git config --global alias."short-name" "long-name"

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

本地仓库

创建版本库

在当前目录下建立仓库使用以下命令:

$ git init

仓库目录下多了名为.git的隐藏目录,这个目录即是Git的版本库

把文件添加到缓存区

$ git add "filename"

把文件提交到仓库

$ git commit -m "description of commit"

查看状态

$ git status

常见状态说明

状态说明
on branch master当前在master分支
changes not staged for commit工作区有未添加到暂存区的修改
changes to be committed暂存区有未提交到当前分支的修改
untracked files未被添加过的文件

查看修改

git status告诉提示有文件被修改过,可以用git diff可以查看修改内容,采用以下语句:

$ git diff "filename"

版本回退

版本回退前可以用通过提交日志查看回档版本号,查看日志采用以下语句:

$ git log [--pretty=onelie]

回档采用以下语句:

$ git reset --hard "版本号"

其中版本号可以用HEAD表示当前版本,用HEAD^表示上一个版本
在版本控制中经常需要查看命令日志,查看命令日志采用以下语句:

$ git reflog

简单文件我们可以在工作台直接查看,采用以下语句:

$ cat "filename"

撤销修改

撤销工作区的修改

工作区是我们硬盘上的物理目录,撤销工作区实际上是用版本库的版本替换工作区的版本。撤销工作区的修改采用以下语句:

$ git checkout --"filename"

撤销暂存区的修改

暂存区是Git的一个概念。git add命令实际上就是把文件修改添加到暂存区,git commit命令实际上就是把暂存区的所有内容提交到当前分支。撤销暂存区的修改采用以下语句:

$ git reset HEAD "filename"

删除文件

在工作区中删除文件

$ rm "filename"

在版本库中删除文件

$ git rm "filename"
$ git commit -m "description-commit"

远程仓库

远程仓库托管网站 GitHub 提供代码托管服务,注册账号后按一下步骤设置:

  1. 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有私钥id_rsa和公钥id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Git Bash,通过以下语句创建SSH Key:
    $ ssh-keygen -t rsa -C "youremail@example.com"

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

添加远程库

  1. 登陆GitHub,在右上角找到“Create a new repo”按钮,创建一个新的仓库
  2. 关联远程库
    $ git remote add origin "your SSH clone URL"

推送到远程库

$ git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程

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

$ git push origin master

从远程库克隆

$ git clone "your HTTPS clone URL"

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快

分支管理

分支基本操作

创建分支

$ git checkout -b "new-branch-name"

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

$ git branch "new-branch-name"
$ git checkout "new-branch-name"

切换分支

$ git checkout "branch-name"

合并分支

$ git merge "designated-branch-name"

git merge命令用于合并指定分支到当前分支,默认用快进模式fast-forward合并,有时应避免用fast-forward

查看分支

$ git branch

git branch命令会列出所有分支,当前分支前面会标一个*号

删除分支

$ git branch -d "branch-name"

解决冲突

解决冲突思路

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成

查看分支合并图

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

分支管理策略

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

$ git merge --no-ff -m "merge-discrimination" "branch-name"

注意:此处-m "merge discrimination"参数中的引号不能去掉

保存当前分支状态

Git提供了一个stash功能,可以把当前工作现场储藏起来,等以后恢复现场后继续工作

设置 stash

$ git stash

查看 stash

$ git stash list

恢复 stash

apply 方法
$ git stash apply
$ git stash drop

git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除

pop 方法
$ git stash pop

git stash pop恢复的同时把stash内容也删了

恢复指定 stash
$ git stash list
$ git stash apply stash@{0}

注意:此处stash@{0}是根据git stash list 命令得到的

丢弃未合并的分支

$ git branch -D "branch-name"

注意:此处参数-D 是大写,代表强行删除;参数-d 代表普通删除

多人协作

查看远程库信息

$ git remote
$ git remote -v

推送分支

$ git push origin "branch-name"

抓取分支

创建远程分支到本地
$ git checkout -b dev origin/dev
指定本地分支与远程分支的链接
$ git branch --set-upstream dev origin/dev

注意:这里的dev 为分支名

抓取分支
$ git pull

多人协作模式

  1. 首先,可以试图用git push origin branch-name推送自己的修改
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
  3. 如果合并有冲突,则解决冲突,并在本地提交
  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功
  5. 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

标签管理

创建标签

给当前分支打标签

$ git tag "tag-name"

给特定分支打标签

$ git tag "tag-name" "commit-id"

注意:“commit-id”可以通过git log 命令查看

查看标签

查看已打标签

$ git tag

查看具体标签信息

$ git show "tag-name"

推送标签

推送某个标签

$ git push origin "tag-name"

推送全部标签

$ git push origin --tags

删除标签

删除本地标签

$ git tag -d "tag-name"

删除远程标签

$ git tag -d "tag-name"
$ git push origin :refs/tags/"tag-name"

搭建Git服务器

以下方法适用于Unix,在sudo权限下操作,仅供参考:

  1. 安装git
    $ sudo apt-get install git
  2. 创建一个git用户,用来运行git服务
    $ sudo adduser git
  3. 创建证书登录
    收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个
  4. 初始化Git仓库
    先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
    $ sudo git init --bare sample.git
    Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git
    $ sudo chown -R git:git sample.git
  5. 禁用shell登录:
    出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
    git:x:1001:1001:,,,:/home/git:/bin/bash
    改为:
    git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
    这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
  6. 克隆远程仓库
    现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
    $ git clone git@server:/srv/sample.git
    Cloning into 'sample'...
    warning: You appear to have cloned an empty repository.
    剩下的推送就简单了。
  7. 管理公钥
    如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队人数较多,这时可以用Gitosis来管理公钥。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值