一、Git整体理解

Git代码管理是分布式管理方式系统,优点在于其极高的安全性和非常强大的分支管理。

image.png

工作区(working directory): 就是本地的代码区,电脑能看到的目录,就是工作区.

暂存区(Index):工作区下有一个隐藏的'.git'文件,其主要作用是存储Git自动创建的第一个master分支,还有指向master分支的HEAD指针.还有一个最重要的stage的暂存区.需要提交的文件修改通通放到暂存区,然后一次性提交到暂存区的所有修改.

本地仓: 本地的个人仓库.管理着个人的代码的版本信息.

远程仓: 线上的仓库.管理着推送到服务器的代码版本.

过程一、有工作区暂存区

工作区->暂存区:

用git add . 添加所有的修改或者git add 添加单个指定的文件修改到暂存区中.

暂存区->工作区:

(1)git rm --cached "文件路径" 不删除物理文件,紧将git的缓存删除.

(2)git rm --f "文件路径" 不仅将该文件从缓存中 删除,还将物理文件删除(不会放到垃圾桶).

例如: git rm -rf .DS_Store

(3)git reset 利用版本库清空暂存区.原理:将当前分支重设(reset)到指定的或者HEAD(默认,如果不指定commit,默认是HEAD,即最新的一次提交)

--hard

git reset --hard 重设(reset)index和working directory,自从以来在working directory中的任何改变都被丢弃,并把HEAD指向

--soft

git reset --soft index和working directory中的内容不作任何改变,仅仅把HEAD指向。这个模式的效果是,执行完毕后,自从以来的所有改变都会显示在git status的"Changes to be committed"中

过程二、由暂存区本地仓库

暂存区->本地仓库

用git commit -m'本次commit的描述'

本地仓库->暂存区

(1) git reset 利用版本库清空暂存区.原理:将当前分支重设(reset)到指定的或者HEAD(默认,如果不指定commit,默认是HEAD,即最新的一次提交)

(2) --hard

git reset --hard 重设(reset)index和working directory,自从以来在working directory中的任何改变都被丢弃,并把HEAD指向

(3) --soft

git reset --soft index和working directory中的内容不作任何改变,仅仅把HEAD指向。这个模式的效果是,执行完毕后,自从以来的所有改变都会显示在git status的"Changes to be committed"中.退回到该次commit提交,但是该版本之后所有的修改都没有了,如果想要恢复,就要试图从还未关闭的终端中找到你想要的退回的版本号,或者用git reflog查找你想要的commit版本号.继续用git reset --soft 回退

过程三、由本地仓->远程仓库

用git push

说明:三种git add的区别

-git add .提交新文件(new)和被修改(modified)的文件,不包括被删除(deleted)的文件

git add -u提交被修改(modified)和被删除(deleted)的文件,不包括新文件(new)

git add -A 提交所有变化

1、在本地创建一个Git管理的项目

从线上拉项目到本地

用git clone "项目的地址路径"克隆一个Git管理的项目到本地

本地项目上传线上

git init

git remote add origin "地址url"

2、Git上的常用查看操作

(1)查看文本内容

cat

(2)查看git的状态

git status会告诉你在当前的分支上git的情况(有没有修改,修改的文件是什么等)

3、查看更详细的文件修改

git diff查看所有文件的不同

git diff 查看指定文件的不同

diff是difference的缩写,只能查看还未add(还没加入到暂存区)的修改

4、查看所有的commit信息

git log

git log --pretty=oneline更简洁的查看log信息(只有commit号和描述信息)

5、查看所有的git操作过的命令,可以找到删除了的commit号

git reflog

6、查看分支合并图

git log --graph

四、冲突处理

需要把

<<<<<

=======

>>>>>>

中间的删掉

五、Git分支操作

1、分支基本操作

分支的创建和切换

git branch "分支名"创建一个分支git checkout "分支名"切换到该分支

创建并切换到该分支git checkout -b "分支名"

列出所有的分支

git branch列出本地分支 用*标记当前的分支

git branch -a列出远程分支

合并分支

git merge "分支名"合并指定分支到当前分支

git rebase "分支名"合并指定分支到当前分支

两者的区别在于会不会保留分支操作的记录,前者记录,后者不记录.建议用merge

删除分支

删除本地分支:git branch -d "分支名"

强制删除本地分支:git branch -D "分支名"

删除远程分支:git push origin :(轻易不要动啊)

如果提示the branch XXX is not fully merged(XXX分支有没合并到当前分支的内容)

本地新建了一个分支要推送到线上,需要设置关联或者追踪

第一次push:git push origin 本地分支名:远程分支名

远程端生成了一个新的分支,拉取到本地

先关联远程端分支到本地:git branch --set-upstream-to=origin/

然后git pull

六、bug的分支

用issue作为分支的开头标记,当有一个bug出现需要改的时候,先拉取一个issue分支,修改并合并到开发分支上,然后删除issue分支。

七、feature分支

开发新的功能的时候,最好拉取一个新的分支,以feature开头。

丢掉一个没有合并过的分支,即删除分支

git branch -D 强制删除该分支内容

八、暂存的使用

1、git stash暂存

2、 git stash list查看所有的暂存

3、git stash apply从暂存开始执行,但是stash内容不会删除

4、 git stash drop删除暂存

5、git stash pop回复暂存的同时删除暂存

6、git stash apply stash@{0}恢复指定的暂存

九、远程仓的操作

查看远程仓的信息

git remote

git remote -v显示更详细的信息

将分支推送到远程仓

git push origin 本地分支名:远程分支名

十、标签的使用

标签智能在master分支上使用,尽量写清楚所有的修改,为了万一的版本回退做好描述工作。

1、git tag 新建一个标签

2、git tag -a -m'指定的标签信息'

3、git show 查看详细的tag信息

4、git tag查看所有的tag名字

5、git tag -d 删除一个标签

6、git push origin < 标签名>推送标签到远程

7、git push origin --tags一次性推送所有未推送的标签

8、删除远程仓上的tag

先删除本地的标签:git tag -d

删除远程端的标签:git push origin :tag名字

十一、Git配置全局信息

1、配置作者名称

git config --global user.name "Your Name"

2、配置个人邮箱

git config --global user.email "email@example.com"

3、配置git的颜色(文件名会标记上颜色)

git config --global color.ui true

十二、Linux的一些简单操作和一些符号的解释

1、目录/文件的操作

-mkdir "目录名" 在当前路径下创建一个文件夹

mvdir "目录1" "目录2"移动或者重命名一个目录 (如果目录2不存在,就直接修改目录1的名称为目录2)

rmdir"目录名" 删除一个目录

touch创建一个文件

vim "文件名 编辑文件,如果文件不存在,就创建并进入编辑.

删除一个文件

sudo rm -rf 在上帝权限下删除,可以删除一个该用户没有权限的文件(包括系统文件),不建议使用

rm 能删除当前用户权限下的文件

2、转换目录

cd + "路径"进入该文件目录下(也可以将文件直接拖进来)

cd ..回到上级目录

-cd . 当前目录 cd / 回到根目录

cd test.rtf 不可用. 不能cd到文件里.只能cd到目录.

报错信息: -bash: cd: test.rtf: Not a directory

3、拷贝/移动/删除

cp "需要拷贝的文件路径" "目标地址路径"

拷贝文件 例如: cp /Users/goulela/Desktop/test.rtf /Users/goulela/Desktop/文件夹2

mv "需要移动的文件路径" "目标地址路径"

移动文件 例如: mv 文件夹2 /Users/goulela/Desktop/创建文件夹/文件夹

4、显示操作

-file "文件名"显示文件的类型

wc "文件名"统计文件的字符数,词数,行数

pwd查看当前所在的目录

ls 显示当前路径下有什么文件

ls + "目录名" 显示特定的路径下有什么文件

ls -w 显示中文

ls -l 详细信息

ls -a 显示所有文件,包括隐藏文件

5、时间操作

data显示系统的当前日期和时间

cal显示日历

6、网络与通信

ping "url" 给一个远程主机发送 回应请求

终止ping打印 control + c

who 列出当前登录的所有用户

whoami显示当前正进行操作的用户名

十三、符号解释

1、-r 就是向下递归,不管有多少级目录,一并删除

2、-f 就是直接强行删除,不作任何提示的意思

3、-rf 向下递归强制删除

十四、显示安装详细信息

在安装命令后面添加--verbose,可以查看打印详细信息

十五、git config

配置git的相关参数

git一共有3个配置文件:

1、仓库级的配置文件:在仓库的.git/.gitconfig,该配置文件只对所在的仓库有效。

2、全局配置文件:Mac系统在~/.gitconfig,Windows系统在C:\Users\\.gitconfig。

3、系统级的配置文件:在Git的安装目录下(Mac系统下安装目录在/usr/local/git)的etc文件夹下的gitconfig。

# 查看配置信息

# --local:仓库级,--global:全局级,--system:系统级

$ git config -l

# 查看当前生效的配置信息

$ git config -l

# 编辑配置文件

# --local:仓库级,--global:全局级,--system:系统级

$ git config -e

# 添加配置项

# --local:仓库级,--global:全局级,--system:系统级

$ git config --add

# 获取配置项

$ git config --get

# 删除配置项

$ git config --unset

# 配置提交记录中的用户信息

$ git config --global user.name

$ git config --global user.email

# 更改Git缓存区的大小

# 如果提交的内容较大,默认缓存较小,提交会失败

# 缓存大小单位:B,例如:524288000(500MB)

$ git config --global http.postBuffer

# 调用 git status/git diff 命令时以高亮或彩色方式显示改动状态

$ git config --global color.ui true

# 配置可以缓存密码,默认缓存时间15分钟

$ git config --global credential.helper cache

# 配置密码的缓存时间

# 缓存时间单位:秒

$ git config --global credential.helper 'cache --timeout='

# 配置长期存储密码

$ git config --global credential.helper store

十六、Git clone

从远程仓库克隆一个版本库到本地。

# 默认在当前目录下创建和版本库名相同的文件夹并下载版本到该文件夹下

$ git clone

# 指定本地仓库的目录

$ git clone

# -b 指定要克隆的分支,默认是master分支

$ git clone -b

十七、Git init

初始化项目所在目录,初始化后会在当前目录下出现一个名为.git的目录。

# 初始化本地仓库,在当前目录下生成 .git 文件夹

$ git init

十八、git status

查看本地仓库的状态

# 查看本地仓库的状态

$ git status

# 以简短模式查看本地仓库的状态

# 会显示两列,第一列是文件的状态,第二列是对应的文件

# 文件状态:A 新增,M 修改,D 删除,?? 未添加到Git中

$ git status -s

十九、git remote

操作远程库

# 列出已经存在的远程仓库

$ git remote

# 列出远程仓库的详细信息,在别名后面列出URL地址

$ git remote -v

$ git remote --verbose

# 添加远程仓库

$ git remote add

# 修改远程仓库的别名

$ git remote rename

# 删除指定名称的远程仓库

$ git remote remove

# 修改远程仓库的 URL 地址

$ git remote set-url

二十、git branch

操作git的分支命令

# 列出本地的所有分支,当前所在分支以 "*" 标出

$ git branch

# 列出本地的所有分支并显示最后一次提交,当前所在分支以 "*" 标出

$ git branch -v

# 创建新分支,新的分支基于上一次提交建立

$ git branch

# 修改分支名称

# 如果不指定原分支名称则为当前所在分支

$ git branch -m []

# 强制修改分支名称

$ git branch -M []

# 删除指定的本地分支

$ git branch -d

# 强制删除指定的本地分支

$ git branch -D

二十一、git checkout

检出命令,用于创建,切换分支等

# 切换到已存在的指定分支

$ git checkout

# 创建并切换到指定的分支,保留所有的提交记录

# 等同于 "git branch" 和 "git checkout" 两个命令合并

$ git checkout -b

# 创建并切换到指定的分支,删除所有的提交记录

$ git checkout --orphan

# 替换掉本地的改动,新增的文件和已经添加到暂存区的内容不受影响

$ git checkout

二十二、git cherry-pick

把已经提交的记录合并到当前分支。

# 把已经提交的记录合并到当前分支

$ git cherry-pick

二十三、git add

把要提交的文件的信息添加到暂存区中。当使用git commit时,将依据暂存区中的内容类进行文件的提交。

# 把指定的文件添加到暂存区中

$ git add

# 添加所有修改、已删除的文件到暂存区中

$ git add -u []

$ git add --update []

# 添加所有修改、已删除、新增的文件到暂存区中,省略 即为当前目录

$ git add -A []

$ git add --all []

# 查看所有修改、已删除但没有提交的文件,进入一个子命令系统

$ git add -i []

$ git add --interactive []

二十四、git commit

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

# 把暂存区中的文件提交到本地仓库,调用文本编辑器输入该次提交的描述信息

$ git commit

# 把暂存区中的文件提交到本地仓库中并添加描述信息

$ git commit -m ""

# 把所有修改、已删除的文件提交到本地仓库中

# 不包括未被版本库跟踪的文件,等同于先调用了 "git add -u"

$ git commit -a -m ""

# 修改上次提交的描述信息

$ git commit --amend

二十五、git fetch

从远程仓库获取最新的版本到本地的tmp分支上。

# 将远程仓库所有分支的最新版本全部取回到本地

$ git fetch

# 将远程仓库指定分支的最新版本取回到本地

$ git fetch

二十六、git merge

合并分支

# 把指定的分支合并到当前所在的分支下

$ git merge

二十七、git diff

比较版本之间的差异

# 比较当前文件和暂存区中文件的差异,显示没有暂存起来的更改

$ git diff

# 比较暂存区中的文件和上次提交时的差异

$ git diff --cached

$ git diff --staged

# 比较当前文件和上次提交时的差异

$ git diff HEAD

# 查看从指定的版本之后改动的内容

$ git diff

# 比较两个分支之间的差异

$ git diff

# 查看两个分支分开后各自的改动内容

$ git diff ...

二十八、git pull

从远程仓库获取最新版本合并到本地。

首先会执行git fetch,然后执行 git merge,把获取的分支的HEAD合并到当前分支。

# 从远程仓库获取最新版本。

$ git pull

二十九、git push

把本地仓库的提交推送到远程仓库

# 把本地仓库的分支推送到远程仓库的指定分支

$ git push :

# 删除指定的远程仓库的分支

$ git push :

$ git push --delete

三十、git log

把本地仓库的提交推送到远程仓库

# 把本地仓库的分支推送到远程仓库的指定分支

$ git push :

# 删除指定的远程仓库的分支

$ git push :

$ git push --delete

三十一、git reset

还原提交记录

# 重置暂存区,但文件不受影响

# 相当于将用 "git add" 命令更新到暂存区的内容撤出暂存区,可以指定文件

# 没有指定 commit ID 则默认为当前 HEAD

$ git reset []

$ git reset --mixed []

# 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改

$ git reset

$ git reset --mixed

# 将 HEAD 的指向改变,撤销到指定的提交记录,文件未修改

# 相当于调用 "git reset --mixed" 命令后又做了一次 "git add"

$ git reset --soft

# 将 HEAD 的指向改变,撤销到指定的提交记录,文件也修改了

$ git reset --hard

三十二、git revert

生成一个新的提交来撤销某次提交,此次提交之前的所有提交都会被保留。

# 生成一个新的提交来撤销某次提交

$ git revert

三十三、删除掉本地不存在的远程分支

多人合作开发时,如果远程的分支被其他开发删除掉,在本地执行 git branch --all 依然会显示该远程分支,可使用下列的命令进行删除:

# 使用 pull 命令,添加 -p 参数

$ git pull -p

# 等同于下面的命令

$ git fetch -p

$ git fetch --prune origin

git status清空_Git常见命令和遇到问题的解决办法相关推荐

  1. linux下hg无法运行_Linux 无法启动常见的几种原因及解决办法

    导致 Linux 无法启动的原因有很多,下面良许小编就将常见的几种原因及解决办法进行详述,希望对大家有所帮助. 文件系统配置不当,如 /etc/inittab文件./etc/fstab 文件等配置错误 ...

  2. 常见的Nginx 502 Bad Gateway解决办法

    常见的Nginx 502 Bad Gateway解决办法如下: Nginx 502错误情况1: 网站的访问量大,而php-cgi的进程数偏少. 针对这种情况的502错误,只需增加php-cgi的进程数 ...

  3. 5 个 Android 开发中比较常见的内存泄漏问题及解决办法

    Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的童鞋应该都遇到过,但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢? 在Android程序开发中,当一个对象已经不需要再 ...

  4. Win10系统在运行界面cmd出现ipconfig命令无法使用的情况的解决办法!!

    Win10系统在运行界面cmd出现ipconfig命令无法使用的情况的解决办法!! 问题描述 解决方案(完整步骤) Hello!从今天开始笔者决定把自己的学习过程记录下来,因为自己的方向以后会是车联网 ...

  5. Linux 下 Shell 命令 IFS 分隔符 -- 应用场景 解决办法

    Linux 下 Shell 命令 IFS 分隔符 – 应用场景 && 解决办法 文章目录 Linux 下 Shell 命令 IFS 分隔符 -- 应用场景 && 解决办 ...

  6. 【日常记录】错误“应用程序无法启动,因为应用程序中的并行配置不正确,有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具”解决办法

    win10安装理正深基坑软件出现该错误 错误"应用程序无法启动,因为应用程序中的并行配置不正确,有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具"解决 ...

  7. mysql grant reload,MySQL执行GRANT命令时报错ERROR 1045解决办法

    摘要 腾兴网为您分享:MySQL执行GRANT命令时报错ERROR 1045解决办法,杂志迷,云闪付,一直播,小象优品等软件知识,以及592美剧,乐天网络电视,吃鸡无后座,易语言宝盒,语音转文字软件, ...

  8. java检测音频爆音_常见的爆音问题及其解决办法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 常见的爆音问题及其解决办法一.什么情况下会出现爆音? 1.声卡的延迟(LATENCY)设置不当引起的爆音 2.Win98操作系统对设备.系统缓存等的管理不 ...

  9. evince命令 pdf中文显示乱码解决办法

    evince命令 pdf中文显示乱码解决办法: wget  http://poppler.freedesktop.org/poppler-data-0.2.1.tar.gz   tar xzvf po ...

最新文章

  1. Nginx 反向代理工作原理简介与配置详解
  2. 自学MVC——添加一个控制器
  3. 神经风格迁移(Neural Style Transfer)程序实现(Caffe)
  4. node MySQL buffer_node.js中buffer方法使用说明
  5. 由浅入深剖析go channel
  6. iphone11什么时候上市_hd3手表高仿哪里买 什么时候上市?
  7. 支持向量机SVM的python实现
  8. pandas尾部添加一条_Numpy与Pandas
  9. 深度学习行人重识别ReID最新综述与展望
  10. Android零基础入门第31节:几乎不用但要了解的AbsoluteLayout绝对布局
  11. Android-入门学习笔记-图片和外观改善
  12. 高中同窗被叫“码子”的!如今转行软件测试,不止是年轻,还有拼搏的勇气
  13. ACLEMNLP'21 | 基于神经转移模型的论辩挖掘任务
  14. 给大家推荐一套 git 工作流
  15. 熟练操作mac系统只需十分钟(Mac新手必看)!!
  16. 常见的宏观经济指标介绍
  17. java抽象类的属性_JAVA 抽象类
  18. 一个公务员的坎坷“仕途”,以及五光十色的沿途“风景”
  19. (2)前端-初识HTML与CSS-table、form
  20. k-Amazing Numbers (惊奇的数字)

热门文章

  1. 笨办法学python3-笨方法学Python3(21-44)
  2. python语法教程-Python语言的核心语法(1)(语法教程)(参考资料)
  3. python常用函数-python常用函数与用法示例
  4. python一个月能学成嘛-0基础学Python,1个月写爬虫,走了哪些弯路?
  5. python编程基础是什么-Python面向对象编程基础解析(一)
  6. 零基础自学python的建议-python 零基础建议学习吗 学习后工作稳定吗?
  7. Opengl-光照-基本光照-投光物-多光源(现实世界的光可不只有太阳也并不只有一个)
  8. LeetCode Binary Tree Right Side View(搜索)
  9. LeetCode Number of Digit One(计算1的个数)
  10. 解读分库分表中间件Sharding-JDBC