git总结1-本地命令

1. 版本控制工具分类

1. 集中式版本控制工具 svn、cvs、 vss (所有代码在一个服务器上容易出现单点故障问题,版本控制必须通过服务器)

2. 分布式版本控制工具 git (代码在每个用户那里,用户自己本地就可以进行版本控制)

2. git和svn的实现原理对比

1. 版本控制

git是快照存储(在.git/objects/文件下)每个文件的改动会生成快照且生成hash戳,当前版本文件没有改动文件指向上一个版本文件的hash戳,每次commit也会生成hash和快照,而所有文件的hash会放到这个下面作为一个tree的属性存在;上一个commit版本hash叫parent属性,构成一个链表结构;git核心就是对这些hash进行管理,

svn每个版本是只存储和上个版本不一致的地方,然后把所有的历史版本串起来,就是当前版本

2. 库存储

git所有的版本都是在本地存储的, 存储位置在.git/object/xxx,本地可以切换分支,再和线上版本比较进行拉取。

svn是在线上的一台服务器上的,每次切换版本都需要从线上拉取,本地不存储各个版本。

3. 分支操作

git分支,在创建时创建了一个指针指向了当前版本的commit对象(此时分支复制以前的commit对象链表),切换分支后提交也只是提交了一个新的commit对象(再分支自己的链表上新增了一个commit对象)。 merge合并的话也只是基于commit对象的tree属性的hash的不同的文件以行微单位进行整合(git的单位是一行);head的指向也是指的是指向某一个分支下的当前的commit对象; 这样就避免了复制粘贴操作,所以就会很快

svn 创建分支是把原来的master拷贝了一份,复制出来来做。效率很低。

3. git本地的签名设置

作用区分开发人员身份,全局和项目局部必须有一个签名,否则无法commit, 签名取谁:就近原则

签名包含用户名和邮箱(邮箱没实际作用,仅仅为了区分身份)

1. 项目局部 存储位置在.git/config下的user节点

1.设置

git config user.name xxx
git config user.email xxx@yyy.com

2. 查看

git config --local --list

2. 全局 存储位置在~/.gitconfig 下的user节点

1.设置

git config --global user.name xxx
git config --global user.email xxx@yyy.com

2. 查看

git config --global --list

4. git的基本概念

1. 本地

1. 工作区
2. 缓存区
3. 本地仓库

2. 远程

1. 远程仓库

5. git本地的文件状态

1. untracked 未追踪 需要git add去追踪变为Staged

2. Unmodify 未编辑 如果被修改则变成Modified/使用git rm 则变为untracked

3. Modified 修改状态 可以git add 添加到暂存区staged/使用 git rm --cached 文件名 Unmodify

4. Staged 暂存状态 可以git commit 提交到本地库/git reset --soft HEAD^ 回到Modified

6. git本地一些基本命令

1. git init

初始化一个git仓库

2. git status

初始化一个git仓库

3. git add 文件名

追踪一个文件加入版本控制

增加一个文件到暂存区

4. git rm --cached 文件名

从暂存区移除

5. git commit -m ‘message’

提交到本地仓库

6. git reset --soft HEAD^

回到add的状态

7. git本地版本控制命令

1. git log

查看本地提交日志

2. git log --pretty=oneline

一行展示本地提交日志

3. git reflog

可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

包含当前版本到各个版本的步数

4. git reset --hard 版本hash

基于索引值来调整head

–xxx命令释义: 发挥作用的位置(工作区1 暂存区2 本地仓库3)

1. --soft 重置3 (重置到add状态)
2. --mixed 重置23
3. --hard 重置123

5. git reset --hard HEAD^^^

只能后退 ^^^ 代表回退3个版本

6. git reset --hard HEAD~5

只能后退 ~5 代表回退5个版本

7. git push 仓库地址别名 分支名 -f

本地回滚完后需要强制覆盖远程仓库

8. 比较本地差异

1. git diff 文件名

1.暂存区无 工作区和最后一次提交比较/2.暂存区无:工作区和暂存区的文件进行比较

2. git diff HEAD 文件名

对文件和本地库上个版本进行diff比较

3. git diff HEAD^^ 文件名

对文件和本地库上2个版本进行diff比较

4. git diff 不带文件名字

可以比较多个文件

9. git本地分支管理命令

1. git branch -v

查看本地分支

2. git branch 分支名字

以当前分支为基础创建分支

3. git checkout 分支名字

切换分支

4. git merge 的分有新功能的分支

合并分支, 修改的是当前分支

5. git branch -d 分支名字

删除分支,需提前切换到其他分支

远程分支删除git push origin --delete 分支名字

10. git解决本地冲突

1. git merge合并后切换出现冲突

2. 手动解决冲突,删除特殊符号

3. 解决完以后 git add . 标记为已解决

4. 随后直接git commit;切记不能够 -m ‘message’

11. tag 标签

tag是git版本库的一个标记,指向某个commit的指针。方便恢复

1. 创建tag

1. 轻量标签

git tag tagName

2. 附注标签 包含打标签者的名字、电子邮件地址、日期时间

git tag -a tagName -m ‘message’

3. 后期打标签 对过去的提交打标签

git tag -a tagName 版本hash戳

2. 查看tag

git tag

3. 删除tag

git tag -d tagName

之后再远程删除tag git push origin :refs/tags/tagName

4. 推送tag到远程仓库

git push 远程仓库地址别名 tagName

5. 使用tag

需要创建一个新的分支来使用这个标签

git checkout -b 新的分支名字 tagName(由于没有上游分支,所以需要 git push --set-upstream origin 新分支名字)

12. git 参数的简称

1. -u -set-upstream 一般只有同时存在多个远程仓库时才会用到

2. -r --recursive 递归

3. -i --interactive 交互式

13. git rebase

这个也是合并的命令, 只不过合并后各个分支的提交历史都是各自是一段,会比较好查看

1. git rebase 分支名

2. 合并有冲突,需要先git add . 再git rebase --continue

14. git stash

临时保存工作区修改

适用场景: 开发分支开发一半不想提交代码,hotfix分支需要修复bug, 使用git stash先保存dev的代码,hotfix修复完bug再到dev恢复回来。 (如果没有提交直接切分支,会丢失内容)

1. 保存stash

1. git stash 基本保存
2. git stash save ‘message’ 携带附加信息保存

2. 查看stash

git stash list

3. 应用 stash

1. git stash pop 出栈第一个stash并应用
2. git stash apply stashNumber 根据索引应用stash

4. 移除stash

1. git stash drop stashNumber 根据索引移除stash
2. git stash clear 移除所有stash

15. git cherry-pick

摘樱桃

可以把某次或者几次 commit 放到当前分支上来,只需知道他们的hash就可以

用法:git kcherry-pick hashA hashB

遇到冲突正常及解决即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值