Git学习小结

  • Git 实战-特性介绍
  • Git
    实战-添加、提交、推送
  • Git 实战-下拉
  • Git 实战-撤销、恢复
  • Git 实战-分支

git是什么?

Git是一个开源的<b>分布式</b>版本控制系统,用于敏捷高效地处理任何或小或大的项目。
ps:果然很简介…

现在已经使用git在项目中做版本控制工具,但是从来没有详细的学过一遍git的命令行操作方法,这次也是通过廖雪峰的git教程在来仔细的学习了一遍。这篇文字也是做一个学习的记录。
廖雪峰Git教程


学习链接

git官网
pro git
廖雪峰的git教程
阮一峰的git博文

git init

命令把这个目录变成Git可以管理的仓库 创建仓库

如果我们误删了工作区的文件,想恢复之怎么办呢?

git概念

工作区
暂存区
本地仓库
远程仓库
本地分支
远程分支

暂存 git add
提交 git commit
获取 git fetch
拉取 git pull
合并 git merge
澳门新葡萄京官网注册 ,推送 git push
分支 git branch

Git
有三种状态:已提交(committed)、已修改(modified)和已暂存(staged)。
已提交表示数据已经安全的保存在本地数据库中。
已修改表示修改了文件,但还没保存到数据库中。
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 版本库。

git add

向仓库中添加文件,实际上是吧文件添加到暂存区

$ git add <file> 

git checkout — itpow.txt

Git 分支 – 分支开发工作流

https://my.oschina.net/nyankosama/blog/270546
https://my.oschina.net/nyankosama/blog/270581

git commit

提交文件,实际上是把暂存区的所有内容提交到当前分支

$ git commit -m "提交说明"

如上通过 git checkout 将 itpow.txt
从本地仓库提取到工作区。注意两个横线后面有个空格,因为文件名不是 git
命令的参数。

git命令清单

  • git –help 查看git帮助命令
  • git –version 查看git版本信息
  • git help config 查看config命令的帮助
  • git config -h 查看config命令的帮助
  • git config –global user.name “John Doe” 设置用户名
  • git config –global
    user.email
    johndoe@example.com
    设置用户邮箱
  • git config –list 查看所有配置
  • git init 把当前目录变成git仓库
  • git status 查看仓库的状态
    git clone <url>
    git add <filePath>
    git add -A
    git commit
    git commit -m ‘memo’
    git commit -am -m ‘memo’
    git push
    git push origin <本地分支名>:远程分支名
    git log
    git reflog
    git reset HEAD <file>
    git remote
    git remote -v
    git remote add <shortname> <url>
    git branch
    git branch -a
    git branch -vv
    git checkout <>
    git checkout -b
    git checkout -b 本地分支名x origin/远程分支名x
    git pull
    git pull <远程主机名> <远程分支名>:<本地分支名>
    git fetch
    git merge
    git tag

(use “git add <file>…” to update what will be committed)
(use “git checkout — <file>…” to discard changes in working
directory)
(use “git reset HEAD <file>…” to unstage)

用git diff HEAD —
readme.txt命令可以查看工作区和版本库里面最新版本的区别

git diff 比较的是工作区和暂存区的差别
git diff –cached 比较的是暂存区和版本库的差别
git diff HEAD 可以查看工作区和版本库的差别

git checkout — file 可以丢弃工作区的修改
git
checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
用命令git reset HEAD
file可以把暂存区的修改撤销掉(unstage),重新放回工作区

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

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,
git reset –hard HEAD^
git reset –hard HEAD~1

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

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

git push origin master 把本地master分支的最新修改推送至远程库

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

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

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

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

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

git status

命令可以让我们时刻掌握仓库当前的状态

有人可能会问,为什么不用 git pull 从服务器拉下来恢复呢?

git diff

顾名思义就是查看differencegit

$ git diff <file> 

$ git diff HEAD --<file>  该命令可以查看工作区和版本库里面最新版本的区别

git pull
的第一步是从服务器远程仓库拉至本地仓库,如果二者版本一样,它就退出了,就不存在后面一步从本地仓库提取到工作区了。

git log

命令查看提交日志

git log --pretty=oneline
将日志简化显示 一行
$ git log --graph
查看分支合并日志
$ git log --graph --pretty=oneline
查看分支合并日志,并一行显示
$ git log --graph --pretty=oneline --abbrev-commit
查看分支合并日志,并一行显示,简化commit id 显示

当然如果我们觉得本地仓库版本比较旧,可以从服务器拉。

git reset

$ git reset --hard HEAD^  
退回上一个版本
$ git reset --hard <commit id> 
退回到指定的版本
$ git reset HEAD <file> 
可以把暂存区的修改撤销掉(unstage),重新放回工作区

HEAD 表示是最新版本

在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

撤销 add

git reflog

用来记录你的每一次命令:提交切换版本id等

如果文件已经暂存至暂存区,git checkout — <file> 之前应该先执行
git reset HEAD <file>,完整如下:

git checkout — filename

把<file>文件在工作区的修改全部撤销,这里有两种情况:

一种是<file>自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是<file>已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

git reset HEAD itpow.txt
git checkout — itpow.txt

git rm

$ git rm <file> 从版本库中删除文件

Git跟踪并管理的是修改,而非文件。

第一次修改 -> git add -> 第二次修改 -> git commit

你看,我们前面讲了,Git管理的是修改,当你用git
add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git
commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

撤销修改的小结:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git
checkout — file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git
reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,可以使用退回版本,不过前提是没有推送到远程库。

  • Git 实战-特性介绍
  • Git
    实战-添加、提交、推送
  • Git 实战-下拉
  • Git 实战-撤销、恢复
  • Git 实战-分支

关联GitHUb


SSH Key

第1步:创建SSH
Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开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文件的内容。

本地仓库内容推送到GitHub仓库

在本地仓库下使用一下命令,将本地仓库和GitHub仓库关联起来

$ git remote add origin git@github.com:GitHub账户名/仓库名.git
origin是默认的远程仓库名称,可以自己修改

git push

将本地的仓库推送到远程

$ git push -u origin master

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

git pull

将远程库拉下来(更新远程库的修改)

注:如果pull失败,原因是本地的分支没有和远程的分支链接

$ git branch --set-upstream localbranch origin/dev   
localbranch:本地分支  origin/dev:远程库名/分支

git clone

远程Clone仓库

$ git clone git@github.com:GitHub账户名/仓库名.git

git branch

查看分支

git branch <name>
创建分支
git checkout <name>
切换分支

git checkout

git checkout -b <name>
创建+切换分支
注:从远程库clone下来时,默认只能看到本地的master分支,如果想在clone下的库的其它分支开发可以用一下命令
$ git checkout -b dev origin/dev  远程origin库的dev分支

git merge <name>

合并某分支到当前分支:

$ git merge --no-ff -m "commit content" branchname
Git 默认的合并方式是 Fast forward 这种模式下,删除分支同样会删除分支信息
以--no-ff模式合并分支,会生成一个新的commit,删除分支后能看见分支的历史信息
默认 Fast forward模式

git branch

git branch -d <name>
删除分支
git branch -D <name>
强行删除一个未合并的分支

git stash

把当前的工作区“存储”起来,可以切换的其他分支修改bug,用于当前开到一半,需要去别的分支修改bug
的情况

git stash drop
删除stash
git stash list
查看当前stash的列表
git stash apply
恢复stash,但stash内容并不删除 
git stash apply stash@{0}
当有多个stash列表的时候,可以指定stash id 恢复
git stash pop
恢复的同时把stash内容也删了

git remote

查看远程库的信息

git remote -v 
查看远程库的详细信息

git tag

tag就是给提交的一个commit绑定在一起,起一个更易于查找的名称。

git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..."可以指定标签信息;
git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
git tag可以查看所有标签。

git push origin <tagname>可以推送一个本地标签;
git push origin --tags可以推送全部未推送过的本地标签;
git tag -d <tagname>可以删除一个本地标签;
git push origin :refs/tags/<tagname>可以删除一个远程标签。

发表评论

电子邮件地址不会被公开。 必填项已用*标注