你必须要了解的 Git基础知识 以及 常用命令
Git是什么?
版本控制工具:在开发过程中用于管理我们对于文件目录等的修改历史,方便查看历史记录,以便方便查看。
Git与SVN最主要区别
SVN是集中式版本控制工具,版本库是集中放在中央服务器的。工作的时候首先要从中央服务器下载。
Git是分布式版本控制管理系统,没有中央服务器,每个人的电脑就是一台完整的版本库,只需要提交自己修改的了部分。
优点
- 适合分布式开发,强调个体。
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作。
Git理论基础
工作区域
- 工作目录-Working Directory
- 暂存区 -Stage
- 资源库-Repository
- 远程Git库-Remote Directory
工作流程
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到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:其他的代码合并同理!
转载自:https://juejin.cn/post/6953961403610824718