git 学习

git学习

  • git bash 快捷键
  • git区域概念
    • 工作区
    • 版本库
    • 暂存区
  • git本地仓库常用命令
    • git init 创建本地仓库
    • git add 工作区提交到暂存区
    • git commit 暂存区提交到本地仓库
    • git status 查看暂存区的状态
    • git log (--graph)查看commit历史
    • git reflog 查看本地仓库全部操作日志
    • git diff 查看当前工作区和暂存区的区别
    • 分支
      • git branch 查看当前所在分支
      • git branch "branchName" 创建分支
      • git checkout "branchName" 切换分支
      • git checkout -b "branchName" 创建并切换分支
      • git merge --no-diff "branchName" 将branchName分支合并到当前分支下
      • git rebase -i 对某一段线性提交历史进行编辑、删除、复制、粘贴
    • 回溯历史版本
      • git reset --hard 目标时间点的哈希值 回溯版本
  • git远程仓库常用命令
    • git remote add 建立连接
    • git push 推送至远程仓库
    • git clone 获取远程仓库
    • git pull 获取最新的远程仓库分支

git bash 快捷键

  • shift + fn + Insert 粘贴

git区域概念

工作区

简单理解就是需要进行版本的某个文件夹(假设为test),这个文件夹有一些特殊之处——多了.git这个隐藏的文件夹。现在假定这个文件夹是test

版本库

test文件夹下的.git文件夹就是版本库。

暂存区

暂存区可以理解为一个虚拟工作区,这个虚拟工作区会跟踪工作区的文件变化(增删改等操作)。这个工作区的位于.git文件夹下的index目录下。除非是绕过暂存区直接提交,否则Git想把修改提交上去,就必须将修改存入暂存区最后才能commit每次提交的是暂存区所对应的文件快照

git本地仓库常用命令

git init 创建本地仓库

git init 命令用于在目录中创建新的 Git 仓库。

git add 工作区提交到暂存区

git add [参数] <路径> 作用就是将我们需要提交的代码从工作区添加到暂存区,就是告诉git系统,我们要提交哪些文件,之后就可以使用git commit命令进行提交了。

git commit 暂存区提交到本地仓库

git commit 主要是将暂存区里的改动提交到本地的版本库。每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id。
commit-id 在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里。
-m 参数表示可以直接输入后面的“message”,如果不加 -m参数,那么是不能直接输入message的,而是会调用一个编辑器一般是vim来让你输入这个message。

git status 查看暂存区的状态

git status 命令用于查看暂存区的状态

通常我们使用 -s 参数来获得简短的输出结果:

git status -s
M README.md
A  hello.php

红色:表示文件还在工作区里面,没有在暂存区里面。
绿色:表示文件在暂存区里面。

??:表示本地新增了一个文件,还没有加入暂存区
A(add):表示新加入暂存区
M(modify):文件的内容或者mode被修改了
D(delete):表示暂存区把这个文件删除了(仓库里还有这个文件)。
R (rename): 表示暂存区把这个文件重命名了(和仓库里这个文件的名字不同)。

git log (–graph)查看commit历史

  • git log 可以让我们查看提交commit history(提交的日志)。
  • git log --graph命令可以以图表形式输出提交日志,非常直观,值得记住。

git reflog 查看本地仓库全部操作日志

  • 查看当前仓库的操作日志。
  • 在日志中,我们可以看到 commit、checkout、reset、merge 等 Git 命
    令的执行记录。即便开发者错误执行了 Git 操作,
    基本也都可以利用 git reflog命令恢复到原先的状态。

git diff 查看当前工作区和暂存区的区别

  • git diff查看当前工作区暂存区的区别。每次commit前都执行一下,看一下这一次提交和上一次提交的区别。
  • git diff --cached [file] 显示暂存区上一次提交(commit)的差异:
  • git diff [hashCode 1]…[hashCode 2] 显示两次提交之间的差异

分支

git 学习_第1张图片
不同的分支中,可以同时进行完全不同的作业。等该分支的作业完成之后再与master分支合并。比如feature-A分支的作业结束后与master合并。

git branch 查看当前所在分支

  • git branch命令可以将分支名列表显示,同时可以确认当前所在分支。
  • 我们当前所在的分支左侧标有“*”(星号)。

git branch “branchName” 创建分支

  • 创建分支“branchName”

git checkout “branchName” 切换分支

  • 切换到分支“branchName”

git checkout -b “branchName” 创建并切换分支

  • 创建并切换到分支“branchName”

git merge --no-diff “branchName” 将branchName分支合并到当前分支下

  • 参数–no-diff的作用是禁止快进式合并。下面举个例子
  • 现在分支是这样的
          A---B---C feature
         /
D---E---F master
  • 我们执行下面两个命令来合并分支
git checkout master
git merge feature
  • 结果就会变成
          A---B---C feature
         /         master
D---E---F 
  • 可以看到这只是移动了master分支的指针而已,并没有进行合并。而如果执行了 git merge --no-ff feature 的话,是下面的结果:
          A---B---C feature
         /         \
D---E---F-----------G master
  • 通常我们把 master 作为主分支,上面存放的都是比较稳定的代码,提交频率也很低,而 feature 是用来开发特性的,上面会存在许多零碎的提交,快进式合并会把 feature 的提交历史混入到 master 中,搅乱 master 的提交历史。所以如果你根本不在意提交历史,也不爱管 master 干不干净,那么 --no-ff 其实没什么用。不过,如果某一次 master 出现了问题,你需要回退到上个版本的时候,比如上例,你就会发现退一个版本到了 B,而不是想要的 F,因为 feature 的历史合并进了 master 里

git rebase -i 对某一段线性提交历史进行编辑、删除、复制、粘贴

  • git rebase -i可以对某一段线性提交历史进行编辑、删除、复制、粘贴;因此,合理使用rebase命令可以使我们的提交历史干净、简洁!
  git rebase -i  [startpoint]  [endpoint]
  • 其中-i的意思是–interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)
    git 学习_第2张图片

回溯历史版本

git reset --hard 目标时间点的哈希值 回溯版本

  • –hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。

git远程仓库常用命令

git remote add 建立连接

git remote add 给远程仓库起的名字 远程仓库url

git 学习_第3张图片

  • 在这张图里git init, git add和git commit都是前期的准备,相当于将你本地的文件都上传到了本地仓库,但是还没有向远端仓库连接
  • 这时候执行git remote add 那句话,就是先将本地仓库和远端仓库建立一个连接。蓝色框是你为远端仓库所起的名字,一般都是叫origin,也可以叫Ceres或者Earth,绿色方框就是你的远端仓库的真实地址

git push 推送至远程仓库

git push -u 远程仓库名 分支

git 学习_第4张图片

  • -u参数的作用:带上-u参数其实就相当于记录了push到远端分支的默认值,这样当下次我们还要继续push到这个远端分支的时候,推送命令就可以简写成git push即可。

git clone 获取远程仓库

/*使用方法*/
git clone 仓库url

git pull 获取最新的远程仓库分支

/*使用方法*/
git pull 远程仓库名 分支名

git 学习_第5张图片

你可能感兴趣的:(git,git,学习,github)