git的使用教程

343 阅读4分钟

来源廖雪峰git教程www.liaoxuefeng.com/wiki

在Windows上安装Git

  • 在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可。
  • 安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
  • 安装完成后,还需要最后一步设置,在命令行输入: $ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"

创建版本库

  1. 首先,选择一个合适的地方,创建一个空目录:
  • 切换根目录命令:$ cd /d
  • 创建文件夹:$ mkdir app
  • pwd命令用于显示当前目录
  1. 通过git init命令把这个目录变成Git可以管理的仓库:
  • $ git init
  • 瞬间Git就把仓库建好了,而且告诉你是一个空的仓库.
  • 如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
  1. 添加文件到Git仓库 git add . 将所有文件添加到暂存区 第一步,使用命令git add ,注意,可反复多次使用,添加多个文件;
  • 简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的。
  • $ git commit -m "wrote a readme file"

第二步,使用命令git commit,完成。

4.修改文件后

  • git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
  • git diff顾名思义就是查看difference

小结:

  • 要随时掌握工作区的状态,使用git status命令。
  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

版本回退

  1. git log命令显示从最近到最远的提交日志 (如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数)
  2. 若要回退到上个版本,我们要知道当前版本是哪个版本。在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
  3. 回到过去:回退命令$ git reset --hard HEAD^
  4. 从过去去未来:若果你又想回退到操作之前的版本,命令窗口未关闭,我们可以找到他的commitId,我们就可以使用 git reset --hard 4356475,回到未来
  5. 如果你把窗口关闭后,你又想去未来,那你可以用git reflog来查询你每次的命令
  6. 小结
  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

常用做法:

git log --pretty=oneline // 查看提交日志
git reset --hard commitId // 回到commitId版本
git push -f // 远程回滚

工作区和暂存区

  • 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
  • 前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
  1. 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
  2. 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支

管理修改

  • 第一次修改 -> git add -> 第二次修改 -> git add -> git commit
  • git commit只负责把暂存区的修改提交了

撤销修改

  1. git checkout -- file可以丢弃工作区的修改
  2. 命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
  • 总之,就是让这个文件回到最近一次git commit或git add时的状态。 3.小结
  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

删除文件

1.一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: $ rm test.txt 2.从版本库删除文件

  • 一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
  • 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本。$ git checkout -- test.txt
  • git checkout . 用版本库里的版本替换工作区的版本
  • git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

远程仓库

由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置: 1.第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key: $ ssh-keygen -t rsa -C "huwanfei125@gmail.com" 如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。 2.第2步:登陆GitHub

  • 打开“Account settings”,“SSH Keys”页面
  • 然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
  • 点“Add Key”,你就应该看到已经添加的Key
  • 当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

添加远程库

1.在github上创建一个仓库 2.将本地库于这个仓库连接: 我们根据GitHub的提示,在本地的learngit仓库下运行命令 $ git remote add origin git@github.com:WFHu125/learngit.git WFHu125是github的用户名,origin远程库的名字 3.下一步,就可以把本地库的所有内容推送到远程库上: git push -u origin master

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

从远程库克隆

1.创建远程库gitskills 2.用命令git clone克隆一个本地库: $ git clone git@github.com:michaelliao/gitskills.git

分支管理

创建与合并分支

Git鼓励大量使用分支:

  • 查看分支:git branch

  • 创建分支:git branch

  • 切换分支:git checkout

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

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

  • 删除分支:git branch -d

常用方法:

git branch master_version // 新建分支
git pull origin master // 将主支代码拉取到当前分支
git add .  // 添加代码到暂存区
git commit -m '提交信息' // 提交代码
git push origin master_version // 将代码推到线上

问题及解决方法

在使用git 对源代码进行push到gitHub时可能会出错,信息如下 To github.com:WFHu125/resume.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'git@github.com:WFHu125/resume.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

原因

github中的README.md文件不在本地代码目录中

解决

可以通过如下命令进行代码合并[注:pull=fetch+merge] git pull --rebase origin master

基本操作图

1. 打开git bash
2. 创建本地库 例如:
$ cd /d 
$ cd git 
$ cd react-music
3. 初始化 git init
4. git add .(将本地所有文件添加到暂存区)
5. git commit -m "初始化" (提交代码)
6. 在github上创建一个远程库
7. 将本地库和远程库链接
* git remote add origin git@github.com:WFHu125/react-music.git
8. git push -u origin master (将本地代码上传到远程库中)