likes
comments
collection
share

你必须要了解的 Git基础知识 以及 常用命令

作者站长头像
站长
· 阅读数 8

Git是什么?

版本控制工具:在开发过程中用于管理我们对于文件目录等的修改历史,方便查看历史记录,以便方便查看。

Git与SVN最主要区别

SVN是集中式版本控制工具,版本库是集中放在中央服务器的。工作的时候首先要从中央服务器下载。

Git是分布式版本控制管理系统,没有中央服务器,每个人的电脑就是一台完整的版本库,只需要提交自己修改的了部分。

优点

  • 适合分布式开发,强调个体。
  • 公共服务器压力和数据量都不会太大。
  • 速度快、灵活。
  • 任意两个开发者之间可以很容易的解决冲突。
  • 离线工作。

Git理论基础

工作区域

  • 工作目录-Working Directory
  • 暂存区 -Stage
  • 资源库-Repository
  • 远程Git库-Remote Directory

你必须要了解的 Git基础知识 以及 常用命令

工作流程

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

Git操作

要管理项目的根目录执行

创建工作目录与常见指令

你必须要了解的 Git基础知识 以及 常用命令

获得Git仓库

创建全新仓库

git init //在当前目录下新建一个Git代码库

克隆远程仓库

# 克隆一个项目和它的整个代码历史(版本信息)
$ git clone [url]

git pull & git fetch

git fetch 将远程主机最新内容拉到本地,用户检查后决定要不要合并到本地分支

git pull 将远程主机最新内容直接拉下来然后合并。 git pull = git fetch + git merge

  • git fetch

    • git fetch 远程主机地址
      git fetch 远程主机地址 分支 //拉取部分
      FETCH_HEAD //取回以后根据FETCH_HEAD查看主机上最新的状态-判断是否更新 
      git merge FETCH_HEAD //将拉下来的最新的合并到代码中
      
  • git pull

    • git pull 远程主机名 分支名
      

提交commit

GIT文件操作

Git提交的时候主要关心文件的两个版本之间是否有改变,判断文件整体是否改变的方法就是SHA-1算法计算文件的校验和。

文件的四种状态

  • Untracked:在文件夹中但是未加到Git库中,不参与版本控制--- git add .
  • Unmodify:文件已经入库但是未修改,
  • Modified:已修改没有进行其他的操作,git add 进入暂存Staged,git checkout 丢弃修改过
  • Staged:暂存,执行git commit将修改同步到库中。

查看文件状态

git status

添加文件与目录

添加文件到暂存区

git add . //全部 [filename]

移除文件与目录

git rm --cached <file>

查看文件修改后的差异

git diff [files]
#比较暂存区的文件与之前已经提交过的文件
git diff --cached

忽略文件

.gitignore

一组规则

提交commit

将暂存区中的文件提交到本地仓库

$ git commit -m [message]

# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化,直接到仓库区,跳过了add,对新文件无效
$ git commit -a

# 提交时显示所有diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...

查看提交日志

git log

查看所有分支日志

"git reflog"中会记录这个仓库中所有的分支的所有更新记录,包括已经撤销的更新。

查看文件列表

git ls-files

撤销本地仓库更新

git reset --hard

回滚操作

git撤销回滚操作.

  • 在工作区
git checkout -- 文件名
git checkout -- .    //全部文件
  • (已add,未commit)
git reset HEAD .  //全部
git reset HEAD 文件名
  • (已commit,未push)

    git log //得到提交的commitID
    git reset --head <commitID>//回到某次的提交
    git reset --head HEAD^//回到最新一次的提交
    
  • (已push)

git revert head
git push origin master

git reset --hard HEAD^
git push origin master -f

revert & reset

  • revert :放弃指定的修改,但是会生成一次新的提交
  • reset:将head指针指向指定提交处,不会在历史记录中找到。

reset有三种模式 hard Mixed soft

hard:本地源码和本地未提交的源码都会回退到某个版本

--soft:保留源码,commit信息回退到某个版本,本地不改变

--mixed:保留源码,只是将git commit 和 index信息回退到某个版本。

Git分支

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 列出所有本地分支和远程分支
$ git branch -a

# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]

# 新建一个分支,并切换到该分支
$ git checkout -b [branch]

# 新建一个分支,指向指定commit
$ git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 切换到上一个分支
$ git checkout -

# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

git把分支代码合并到master主分支上

git pull:从远程获取代码并合并本地的版本

首先切换到当前的分支

git checkout noworigin

使用git pull 将分支代码pull下来

git pull

切换到主分支

git checkout master

把分支代码merge到主分支

git merge noworigin 

push上去

git push

tips:其他的代码合并同理!