Git个人扫盲

Git 与 SVN区别:

a、存储方式不一样

Git按照元数据的方式将文件的一个版本存入了一个类似与K/V数据库,而SVN是按照文件的方式进行一个存储。

b、使用方式不一样
  从本地把文件推送到远程服务,SVN只需要commit而Git需要add、commit、push三个步骤。
  使用SVN开发者只要把文件修改了,只要commit其他开发人员就可以直接checkout下来。

c、管理模式不一样
  Git是一个分布式的管理系统,而SVN是远程集中式的管理系统。

Git和SVN的区别_UncleMoveBrick的博客-CSDN博客_git和svn


git log

  • git log --online --number       每个log只显示一行,显示number条
  • git log --online --graph          图形化表示合并历史
  • git log  branchname                特定分支
  • git log --grep=keywords
  • git log --author=xxx

git reflog

git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

reflog 是git 用来记录引用变化的一种机制(如:分支变化或HEAD引用变化

HEAD变化记录路径是.git/logs/HEAD,分支的reflog记录路径是.git/logs/refs

HEAD@{0} HEAD当前值


Staging area: 暂存区

git add 可以放入新添加的文件或改动,commit时提交的改动是上一次加入到暂存区中的改动


git diff

  • git diff --cached            暂存和上一次提交时的快照间的差异
  • git diff  HEAD               比较working directory和上一次提交之间所有的变动

HEAD是指当前分支最末最新的一次提交


git commit

  • git commit -m “the commit message”
  • git commit --amend      增补提交

git reset:回滚某次提交

git reset --soft id

HEAD改变(提交记录改变),暂存区内容不变,在git reset mixed之后,实际上又做了一次git add,取消了commit的内容

(HEAD改变,add(暂存区)没变,commit取消)

git reset --mixed id

HEAD改变(提交记录改变),本地文件没有改变,取消了commit和add的内容

(HEAD改变,add(暂存区)取消,commit取消)

git reset --hard id

HEAD = INDEX = Working copy,重置HEAD指向,文件被更改

(HEAD改变,add(暂存区)跟着改变,commit改变)

soft(影响commit) < mixed (影响 commit + add)< hard(影响 commit + add + local working)

举例:

git reset –soft HEAD~1

  • 回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受响)

git reset (–mixed) HEAD~1

  • 回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也不受影响)

git reset –hard HEAD~1

  • 回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换

git revert:放弃某次提交

  • git revert HEAD        撤销最近一次提交

Revert 撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。

相比 git reset,它不会改变现在的提交历史。因此,git revert 可以用在公共分支上,git reset 应该用在私有分支上。

命令作用域常用情景
git reset提交层面在私有分支上舍弃一些没有提交的更改
git reset文件层面将文件从缓存区中移除
git checkout提交层面切换分支或查看旧版本
git checkout文件层面舍弃工作目录中的更改
git revert提交层面在公共分支上回滚更改
git revert文件层面(然而并没有)


git 删除

git reset回滚某次提交    revert 只会让 commit 继续往前


git revert放弃某次提交     用于做整段 commits 的还原,如果想回退到某次提交时候


git rebase 重建提交顺序    假如想要抽掉某个 commit 又不想留下记录, rebase -i 就很好用了

参考:git撤销commit的三个方法 – 歪麦博客


git rm

命令用于从工作区和索引中删除文件。


git stash

当你在一个分支上在进行开发时,临时需要切换到另一个分支解决一些比较紧急的事情,问题是你才工作了一般,你不想回不到这个工作点,这时就需要用git stash命令了。

    把当前的改动压入一个栈,留给用户一个clean的工作状态,即处于上一次最新提交处

  • git stash list               显示这个栈的list
  • git stash apply           取出stash中的上一个项目,并应用于当前的工作目录
  • git stash drop
  • git stash clear
  • git stash(这个) 保存当前的工作进度。会分别对暂存区和工作区的状态进行保存。

  • git stash save “message…” 这条命令实际上是第一条 git stash 命令的完整版。

  • git stash list 显示进度列表。此命令显然暗示了git stash 可以多次保存工作进度,并用在恢复时候进行选择。

  • git stash pop(这个) 如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除。

  • git stash apply 除了不删除恢复的进度之外,其余和 git stash pop 命令一样。

  • git stash clear 删除所有存储的进度。


git branch

  • git branch -v              可以看见每一个分支的最后一次提交
  • git branch
  • git branch -d              删除一个分支

git tag

和commit 的commit-sha1有些相似,其实就是给当前的版本做个标记,以便回退到此版本。如果使用commit-sha1,大家都记不住那条冗长的sha1码,所以用tag标签来做记录

发布一个版本时,我们通常先在版本库中打一个标签(tag)

  • git tag -a 标签内容 -m 标签标号              建立标签
  • git push origin -tags                              提交标签到远程仓库
  • git tag -d version                                    删除标签
  • git push origin :refs/tags/version           删除远程标签
  • git  tag  或   git  tag  -l                            查看标签

git fetch 取下来不合并

git pull = fetch + merge


自己的分支为了同步develop或master新的提交信息到自己本地分支,要用到 merge  &   rebase

git merge:自动创建一个新的commit,如果合并遇到冲突,仅需要修改后重新commit

优点:记录真实的commit情况,包括每个分支的详情

缺点:每次merge会自动产生一个merge commit,commit比较频繁时,会看到分支很混乱


git rebase:重建提交顺序

rebase:变基(找公共祖先)

优点:得到更简洁的项目历史,去掉了merge commit

缺点:如果合并出现代码问题不容易定位,因为重写了history

作用:(1)合并多个commits为一个commit (2)分支合并

会将本地本地所有的提交临时保存为补丁(patch),放在“.git/rebase”目录中,将当前分支更新到最新的分支顶端,然后把保存的补丁应用到分支上(rebase 将所有master的commit移动到你的feature 的顶端)

  • git rebase --continue         继续打余下补丁
  • git rebase --abort               终止rebase,分支切回到rebase之前的状态

https://blog.csdn.net/victorzzzz/article/details/104192325

如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase

如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge

参考:这一次彻底搞懂 Git Rebase | 码农网

参考:git rebase 和 git merge 的区别 - 简书


特殊符号:

  • ^ 父提交(^n 第n个父提交)
  • ~<n> 连续<n>个^
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值