git基本使用

基本命令

mkdir foldername # 创建文件夹
cat filename # 查看文件内容
pwd # 显示当前目录
git init # 把当前目录变成git可以管理的仓库
git add filename # 把文件添加到暂存区中
git commit # 把文件提交到仓库
git status # 查看是否还有文件未提交
git diff filename # 查看文件改了什么内容,git只能跟踪文本文件的修改,如果是图片或视频等文件只能跟踪图片的大小变换,不能知道具体修改了哪些信息
git log # 查看历史纪录
git log --pretty=oneline # 查看历史纪录(整齐格式)

git reset --hard HEAD^ # 回退到上一版本
git reset --hard HEAD^^ # 回退到上两个版本
git reset --hard HEAD~100 # 回退到前100个版本

git reflog # 获得版本号
git reset --hard 版本号 # 回退到某个版本
git checkout --filename # 把file在工作区做的修改全部撤销
rm filename # 删除文件

工作区与暂存区的区别

  • 工作区(WorkSpace):就是你在电脑上看到的目录,比如目录下test里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。

  • 版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支master,以及指向master的一个指针HEAD。使用Git提交文件到版本库有两步:

    第一步:是使用 git add 把文件添加进去,实际上就是把文件添加到暂存区。

    第二步:使用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支上。

将本地文件和github关联

关联SSH Key

  1. 创建SSH Key。看用户主目录下是否存在id_rsa和id_rsa.pub这两个文件,如果没有在命令行输入命令

    ssh-keygen -t rsa –C “youremail@example.com
    

    id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

  2. 登陆 github ,打开settings 中的SSH Keys页面,Add SSH Key,填上title,在key文本框里粘贴id_rsa.pub文件的内容。

添加远程库

git remote add origin https://github.com/username/reponame.git
git push -u origin master

第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。推送成功后,可以立刻在github页面中看到远程库的内容已经和本地一模一样了。

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

1
git push origin master

把本地master分支的最新修改推送到github上了,现在你就拥有了真正的分布式版本库了。

从github克隆到本地

git clone https://github.com/username/reponame

分支的创建与合并

每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

git branch bname # 创建bname分支
git checkout bname # 切换到bname分支
git checkout -b bname # 创建bname分支并切换
git branch # 列出所有分支

git merge bname # 在当前分支下合并bname分支
git branch -d bname # 删除bname分支

解决冲突

当不同分支有不同的修改,此时要合并时会产生冲突。

分支管理策略。通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。

  • 创建一个bname分支

  • 修改内容

  • 添加到暂存区

  • 切回主分支(master)

  • 合并bname分支,使用

    git merge -no-ff -m "注释" bname
    
  • 查看历史记录

分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

bug分支

在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。

比如我在开发中接到一个404 bug时候,我们可以创建一个404分支来修复它,但是,当前的dev分支上的工作还没有提交。

并不是我不想提交,而是工作进行到一半时候,我们还无法提交,比如我这个分支bug要2天完成,但是我issue-404 bug需要5个小时内完成。怎么办呢?还好,Git还提供了一个stash功能,可以把当前工作现场 ”隐藏起来”,等以后恢复现场后继续工作。

git stash # 将当前的工作现场隐藏
git stash apply # 恢复
git stash drop # 删除
git shash pop # 恢复时也把stash内容删除

所以现在我可以通过创建issue-404分支来修复bug了。

首先我们要确定在哪个分支上修复bug,比如我现在是在主分支master上来修复的,现在要在master创建一个issue-404分支,修复完成后切换到master上合并分支。

多人协作

git remote # 查看远程库信息
git remote -v # 显示详细信息
git push origin master # 将当前的分支推送到远程库的master分支

master分支是主分支,因此要时刻与远程同步。 一些修复bug分支不需要推送到远程去,可以先合并到主分支上,然后把主分支master推送到远程去。

1
git checkout -b bname origin/bname # 抓取bname分支

相关手册

Git中文手册

Git教程

# 使用单$作为行内数学公式分界符