一步一步吃透git命令

704 阅读5分钟

git基础可了解tian-jq.gitee.io/2020/02/15/…

缓存管理

git stash 缓存工作区内容

git stash list 显示工作区内容

git stash pop 弹出stash列表最新的缓存

git stash apply stash@{0} 应用指定缓存

git stash clear 清除所有缓存

git初始化、版本提交

初始化

git init

版本提交

git add . git add 文件名 git commit -m "备注内容" git push

git add .git add 文件名区别

git add .:提交所有修改的文件,

git add 文件名:提交指定文件

git push推送到远程版本库

push的内容我们先不管,push这个命令其实和提交没关系

版本记录log

git log git reflog git shortlog

常用参数:--all --oneline --graph

git loggit reflog

git log:方便查看commit的版本,但是版本回退后,使用git log 看不到回退版本号之后的版本记录

git reflog: 版本回退后,仍然可以看到所有的版本记录 方便查看每个操作步骤所在的版本,可以根据版本号自由前进后退

git shortlog:按作者对每个提交分组,并展示每个提交信息的第一行,这种方式能很容易看出谁参与了工作。

常用参数

--all:显示所有记录

--oneline:以一行的格式显示一个版本

--graph:绘制一幅表示分支结构提交历史的ASCII图

--decorate:让git log展示所有指向每个提交引用(如分支,标签等)

参数位置不分先后;

习惯命令:git log --all --oneline --graph --decorate

撤销 管理

工作区 撤销

git checkout -- 文件名

暂存区 撤销

git reset HEAD 文件名 或则git reset HEAD

git reset --hard HEAD

git reset HEAD 文件名git reset HEAD的区别?

加文件名:撤销指定文件的修改
不加文件名:撤销所有暂存区的修改

--hard的作用

有了参数--hard,直接把工作区的内容也修改了,不加--hard的时候只是操作了暂存区,不影响工作区,
--hard一步到位,不加--hard需要分开执行,两步操作。
这里选择性使用!

版本库 撤销

git reset 版本号 或则 git reset HEAD^

git reset --hard 版本号 git reset --hard HEAD^

git reset 版本号git reset HEAD^的比较

git reset 版本号:通过git log获得版本号(这里的版本号可长可短,能唯一确定某一commit即可),回退到任意版本 git reset HEAD^:快捷操作,回退到上一版本,同理可使用git reset HEAD^^回退两个版本,以此类推

--hard的区别

加--hard:直接退回到之前版本 不加--hard:修改会退回到工作区 此处的区别和暂存区的--hard类似,有了参数--hard,直接忽略掉工作区修改这一步。

总结

a、如果还没 git add file ,使用该指令进行撤销:  git checkout -- fileName  
b、如果已经git add file  , 但是没有 git commit -m ""  分两步操作:
	b-1、git reset HEAD file 或则 git reset HEAD
	b-2、git  status
	b-3、git checkout -- file
(或则一步操作直接删除修改:git reset --hard HEAD)
c、如果已经git add file 并且已经 git commit ,那么回退版本办法是:
	c-1、通过 git log 或者 git reflog
	c-2、找到对应的commit id进行回退:git reset 版本号 或则 git reset HEAD^(注意:
	根据需求选择使用:--hard)

版本管理

版本回退

git reset --hard 版本号 git reset --hard HEAD^

--hard参数的作用,根据情况选择 git reset 版本号:通过git log获得版本号,回退到任意版本 git reset HEAD^:快捷操作,回退到上一版本,同理可使用git reset HEAD^^回退两个版本,以此类推

git reset --hard 版本号 git revert -n 版本号

git reset --hard 版本号:通过reset的方式,把head指针指向之前的某次提交,reset之后,后面的版本就找不到了;

这种操作存在一个问题,服务器上的代码虽然被还原了,但假如有多个人在使用,他们本地的版本依然是比服务器上的版本高的,所以,别人再重新提交代码的话,你撤销的操作又会被重新,你上面的操作也就白操作了。解决办法是,让别人把本地的分支先删掉,然后重新从服务器上拉取分支。

git revert -n 版本号:这种方式不会把版本往前回退,而是生成一个新的版本(-n :new)

对于刚才出现的问题,用这个命令就可以避免,因为版本在往前走,而不是后退,所以其他成员只需要更新一下代码就可以了。

分支管理

分支管理

新建 切换 删除 分支

git branch 分支名 git checkout 分支名 git checkout -b 分支名

-d -D

git branch 分支名:新建分支

git checkout 分支名 :切换分支

git checkout -b 分支名:创建并切换分支

-d: 删除分支

-D: 强制删除分支

分支合入

(评论区有更多注解)

git merge 分支名

git rebase 操作

了解git rebase:链接

远程管理

下拉

git clone 项目地址

添加远程版本库

it remote add <remote_name> <remote_address> # 添加远程仓库

同步

git pull 远程分支:比较简单、暴力,直接更新到本地仓库

git fetch 远程分支 + git merge 分支:更加安全,先和本地仓库进行对比,解决可能存在的冲突项,再merge

提交

git push -u <remote_name> master # 推送本地仓库至远程仓库

一般先推送到自己的github版本库,再向远程主仓库提起PR