git常用操作命令大全

基础的git命令
1 创建(初始化)工作目录git init :对工作目录进行修改

2 git add ./ : 代表以下两条命令,将修改的文件生成的git同步到git数据库(版本区)然后再到暂存区,然后将文件状态由未跟踪标记为已跟踪

  • git hash-object -w 文件相对路径(修改了多少文件此命令就要被执行多少次) ,执行后数据(这一步生成的是hash类型数据)由工作区先到版本库
  • git update-index --add --cacheinfo :将哈希对象由版本区数据库传到到暂存区

3 git commit -m "注释内容“:代表以下两条命令

  • git write-tree :在暂存区的哈希对象生成树对象tree(暂存区的git对象不发生变化),而后提交到到objects版本库中
  • git commit-tree:将objects中的tree对象生成commit对象(第一个就不用考虑父对象)。
  • git commit -am “注释内容” :如果只是对已跟踪的文件进行下修改,那么就等价于git add和git commit同时执行,如果产生新的未跟踪文件(意味着有新建的文件),那就要分别执行git add和git commit

总结:由2,3我们可知:执行git add 生成的哈希对象首先传送到版本库,再由版本库回传到暂存区,最后在暂存区通过git commit 命令生成tree对象后将tree对象提交到版本库中

4 git status查看git目录文件状态

  • 工作目录状态只有两种,已跟踪(执行完add操作的文件,之后的状态可以是已提交,已暂存,已修改,但不能回到已修改状态)和未跟踪(未执行add操作),已跟踪即意味着该文件已经被纳入了版本库进行管理
  • 初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为已提交;在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件。使用 Git 时的文件状态变化周期如下图所示
    在这里插入图片描述
  • 工作目录下有test1.txt和test2.txt,对test1执行了git add操作,test2没有进行任何操作
    在这里插入图片描述
    当我们把test1.txt和test2.txt全部提交后,状态如下
    在这里插入图片描述
    总结
Untracked files:说明有文件还处于未跟踪状态,通过git add命令使其处于已跟踪状态

Changes to be committed:文件处于被跟踪未修改状态,但还没有提交,需要执行git commit命令

On branch master
nothing to commit, working directory clean //出现这种提示,这说明你现在的工作目录相当干净,全部的文件都已被提交

Changes not staged for commit: //文件处于已跟踪状态,但中途被修改,使得文件变为未修改

5 git diff:查看哪些已修改的文件还未暂存(此类文件在命令行中是红色) ,加上-cached可知有哪些已暂存,的准备下次提交,加上–stage可以查看哪些被修改的以及暂存了的还没有提交

6 git log --oneline:查看日志记录即提交的历史记录

7 git branch分支操作:为你创建了一个可以移动的新的指针。 比如创建一个 testing 分支git branch testing,这会在当前所在的提交对象上创建一个指针,但并不会自动切换到新分支中去。也就是HEAD头指针依然指向原来的旧分支。同理,再次提交,分支移动的是HEAD指针所指的分支即旧分支移动

git branch:查看本地所有分支
git branch 分支名:创建一个名为xxx的新分支
git branch -d 分支名
git branch -v 分支名:查看每个分支的最后一次提交

分支切换git checkout,也就是使HEAD指向我们指定的分支,切换分支意味着当前文件工作目录会回退到该分支最后一次提交的文件状态。所以在切换分支前一定要保证当前工作目录下所有文件都处于已被提交的状态,否则会出现各种各样问题。
总结:切换分支会有三个地方发生改动①暂存区②工作目录③HEAD指针

git checkout 分支名

注意:①如果是在全部文件已提交的基础上又新建了一个文件,此时再进行分支切换,切换成功后这个文件会会被保留,导致分支污染②如果是

git init // 初始化 在工作路径上创建主分支
git clone 地址 // 克隆远程仓库
git clone -b 分支名 地址 // 克隆分支的代码到本地
git status // 查看状态
git add a// 将a文件存入暂存区
git add./ // 将当前层级下的所有文件提交到暂存区(流程是先到版本库再到暂存区)
git add -p 文件名 // 一个文件分多次提交
git stash -u -k // 提交部分文件内容 到仓库 例如本地有3个文件 a b c 只想提交a b到远程仓库 git add a b 然后 git stash -u -k 再然后git commit -m "备注信息" 然后再push push之后 git stash pop 把之前放入堆栈的c拿出来 继续下一波操作
git commit -m "提交的备注信息"  // 提交到版本库,若已经有若干文件放入版本库但并没有add到暂存区,再次提交也可以不用git add和git commit -m "备注信息" 这2步结合, 直接用git commit -am "备注信息" 即可! 

存储密码凭证 设置别名 获取config信息以及配置

git config --list // 获取config信息
git config --global core.safecrlf false // 去掉git add 命令后 出现的一堆CR LF提示信息
其中CR是回车的意思 LF是换行
git config --global credential.helper wincred // 存储凭证 (可用于输入一次用户密码后,不再输入 有时我们已经用SSH key 绑定关联好了 但是每次git提交的时候 还是需要你输入用户名密码 在这个时候 敲入这个命令 将凭证存储起来 用户名密码就不需要再次输入了)
git config --global alias.ci commit // 将commit命令设置别名ci git commit命令将由git ci来代替

14.对比工作区,暂存区,仓库的差异

git diff // 查看变更 工作区与暂存区的差异比对
git diff --cached // 暂存区与提交版本的差异
git diff HEAD // 工作区与仓库中最后一次提交版本的差别
git diff 版本哈希值 版本哈希值 // 查看这2个版本哈希之间的区别
或者 git diff HEAD~数字 HEAD~数字
 
git tag tt HEAD~4 给倒数第5次提交打一个tag tag名字是tt
git diff tt 就是倒数第5个版本与第一个版本之间的差异
git diff --cached tt 暂存区与倒数第5个版本之间的比对

15.查看提交信息

git show HEAD // 查看最后一次提交修改的详细信息 也可以用git show 哈希值 查看对应的内容
git show HEAD^ // 查看倒数第二次的提交修改详细信息
git show HEAD^^ 或者git show HEAD~2 查看前2次变更
git show HEAD 或 git show 哈希值 或者git show tag(标签名) 都可以查看最近一次提交的详细信息

16 .查看信息

git log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short
// 获取git log里的树形详细信息 包括hasg 日期 提交信息 提交人等
git log --oneline //拉出所有提交信息 q是退出
git log -5 // 查看前5次的提交记录
git log --oneline -5 // 打印出的日志里面只有哈希值和修改的内容备注
git log 文件名 // 查看该文件的提交
git log --grep // 想过滤看到的内容   过滤日志
git log -n // 查看近期提交的n条信息内容
git log -p // 查看详细提交记录

17

git commit --amend -m "提交信息" // 回撤上一次提交并与本次工作区一起提交
git reset HEAD~2 --hard // 回撤2步
git reset --files // 从仓库回撤到暂存区
git reset HEAD // 回撤暂存区内容到工作目录
git reset HEAD --soft 回撤提交到暂存区
git reset HEAD --hard // 回撤提交 放弃变更 (慎用)
git reset HEAD^  // 回撤仓库最后一次提交
git reset --hard commitid // 回撤到该次提交id的位置 回撤后本地暂存区可能有内容 本地仓库有要同步的内容 此时 丢弃掉暂存区的内容 并且强制将本地的内容推送至远程仓库 执行下面的命令 git push -u -f origin 分支名 这样就可以完全回撤到提交id的位置
git reset --soft commitid // 回撤到该次提交id的位置 并将回撤内容保存在暂存区
git push -f -u origin 分支名 所有内容都回撤完了 将回撤后的操作强制推送到远程分支
git push origin/分支名 --force 强制将本地回撤后的操作 强制推送到远程分支

分支

分支的检查

使用如下git 命令查看所有远程分支

git branch -r

查看远程和本地所有分支

git branch -a

查看本地分支

git branch

分支的删除

git branch -d test //删除分支test,如果分支上还有内容或者分支是无法删除的
git branch -D test //强制删除分支test

如何新建和切换分支

1、git branch test; //仅仅创建一个分支test(图中是testing),不会影响head指针,该分支默认指向当前的提交对象
在这里插入图片描述
我们在使用git -log --oneline查看当前状态,完全符合上图的分析
在这里插入图片描述

2 、git checkout test; //将head指向分支test,此时如果进行提交,那么效果图如下
在这里插入图片描述
再次查看分支状态,结果如下,符合上图推理
在这里插入图片描述
3、git checkout -b test 创建分支test并立刻将HEAD指向它,也就同时上面命令1和2的功能

注意:

  • 切换分支即意味着切换到那个分支的最后一次提交的状态,会使工作目录变化,例如上图f30ab对应a文件,87ab2对应a文件和b文件,我们重新切换回master分支,那么当前项目就恢复到了master分支最后一次提交前,也就是只有a文件的状态 。
  • 如果是在test分支上又创建了c文件(开辟test分支的目的就是为了增加新功能,也就是来编写c文件,这一点是要和主分支master独立开的),并在c中做了大量工作但没有跟踪c(没有add c文件),切换回master,切换操作会成功而且c文件也会出现在master分支,这是git防止你的工作白费而而设置的保险策略给你兜底,但这样依然会污染master分支,因为c本就不应该出现在master分支上
    解决:切换分支前一定要全部内容都处于已提交状态,也就是通过git status查看显示working tree clean,这样才能进行切换分支的操作!新建分支时通常应该先回master主分支,然后在主分支上开辟新分支
  • 我们可以将commit这个功能理解为,在master分支执行commit,那么master的文件a就是master的专属功能版本,在test分支上执行commit,那么a,b,c文件就是test分支的功能版本。反正,在test在提交了a,b的基础上没有联通c文件一并提交,那么c文件就没有所属分支,而git系统为了防止c文件的丢失,即使是切换分支上,也会将其保留到刚切换的分支上,这就造成了分支污染
  • 切换分支会改变三个地方①HEAD指针②工作目录③暂存区

4、git merge:分支合并
注意:应该是主分支master合并其它分支而不是master合并主分支

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值