git 学习

学习廖雪峰 Git 教程记录

git 是一个分布式版本控制系统,更好的管理文件。但是其实 Git 跟踪管理的是修改,并非文件。
初始化一个仓库,使用 git init

创建版本库

添加文件到 Git 仓库,分两步:

  • git add <file> 可一次添加多个文件
  • git commit -m "说明" 提交并添加注释

git staus 可以查看工作区的状态
如果 git status 告诉你文件有被修改过, 用 git diff 可以查看修改内容

版本回退

HEAD 指向的版本是当前版本,使用 git reset --hard commit_id 可以回退到指定版本
git log 可以查看提交历史
git reflog 查看命令历史

暂缓区

Git 的版本库在工作区的隐藏目录 .git 中,里面有很多东西,最重要的是称为 stage 的暂存区,还有 Git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针 HEAD。

来源于廖雪峰的 Git 教程

git diff HEAD -- <file> 查看工作区和版本库里面最新版本的区别。

撤销修改

直接丢弃工作区的修改时,可是使用 git checkout -- file 注意 -- 必须加。
当文件已经被添加到了暂存区时,想丢弃修改,分两步:

  • git reset HEAD file
  • git checkout -- file
    当文件已经被提交到了版本库时,可以回退版本库。使用 git reset --hard commit_id

删除文件

git rm file 从版本库和工作区中删除文件,之后 git commit
git checkout -- file 用版本库里的版本替换工作区的版本。

远程仓库

  1. 创建 SSH Key
ssh-keygen -t rsa -C "youremail@example.com"

之后会在目录下生成 .ssh 目录

ssh.png

  1. 在 GitHub 中打开 “SSH and GPG keys”,并且 “New SSH key”,填写 title, 将 id_rsa.pub 中的内容复制进去
    asd.png

当然,也可以添加多个 Key,GitHub 只要知道了你的公钥,就可以确认只有你自己才能推送。远程仓库是为了方便你的硬盘。
将本地仓库内容推送到 GitHub 仓库

git remote add origin git@github.com:MjSeven/learngit.git
git push -u origin master

关联一个远程库,使用 git remote add origin git@server-name:path/repo-name.git
关联后,使用 git push -u origin master 第一次推送master分支的所有内容
之后就可以使用 git push origin master 推送最新修改

分支操作

查看分支 git branch
创建分支 git branch <name>
切换分支 git checkout <name>

快捷操作 git checkout -b <name>

合并某分支到当前分支 git merge <name>
删除分支 git branch -d <name>

分支策略

在实际开发中,有几个基本原则:
master 分支应该是非常稳定的,仅仅用来发布新版本
平时都应该在一个新的分支 dev 上干活,它是不稳定的,到时机成熟时,把 dev 分支合并到 master 上,在 master 分支发布新版本。

图片来自于廖雪峰 git 教程

合并分支时,加上 --no-ff 参数可以使用普通模式合并,合并后的历史有分支

Bug 管理

修复 bug 时,会通过创建新的 bug 分支进行修复,然后合并,最后删除
如果当前分支还有未完成的工作时,先 git stash 保存工作现场,然后去修复 bug,修复后使用 git stash pop,回到工作现场。

如果是新加特性,最好新建一个分支
如果要丢弃一个没有合并过的分支,可以使用 git branch -D <name> 强行删除

本文所有内容来自于以下网站学习:
https://learngitbranching.js.org/?

初级篇

    git commit

仓库中的提交记录保存的是你的目录下所有文件的快照,git 希望记录尽可能地轻量,在每次提交时,它并不会盲目复制整个目录,在条件允许下,它会将当前版本于仓库中的上一个版本进行对比,并把所有差异打包到一起作为一个提交记录

    git branch

使用分支相当于在说:“我想基于这个提交以及它所有的父提交进行新的工作”

git 创建再多的分支也不会造成存储或内存上的开销

    git checkout <name>

切换工作分支

    git checkout -b <your-branch-name>

创建一个新的分支同时切换到新创建的分支

    git merge <name>

将 name 的分支合并到当前分支
git rebase
Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后再另外一个地方逐个放下去

高级篇

    HEAD

HEAD 是一个对当前检出记录的符号引用 -- 也就是指向逆正在其基础上进行工作的提交记录。

HEAD 总是指向当前分支最近一次提交记录。

^

相对引用,向上提交一个记录,如 git checkout master^ ,就是切换到 master 的父节点。 另外也可以将 HEAD 作为相对引用的参照。例如: git checkout HEAD^

~ 

如果你想在提交树上移动很多步的话,敲很多 ^ 非常烦人,所以引入了操作符 ~ ,该操作符后可以跟一个数字,不跟时与 ^ ,相同。

git branch -f master HEAD~3

将 master 分支强制指向 HEAD 的第 3 级父提交

git reset  /  git revert

撤销变更 通过 HEAD^ 提交, 撤销本地分支

当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,在提交,合并完成。
用 git log --graph 可查看分支合并图

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 逛帖子的时候偶尔发现了一篇lambda很容易入门的帖子,转载于30分钟入门Java8之lambda表达式 前言 G...
    噬魂Miss阅读 771评论 0赞 3
  • 这几天都很忙,所以断更了一天,后面几天还很迟才有时间写,今天趁这个空挡写一下吧,这样晚上就不用连睡觉也记着,今天...
    晴冰阅读 331评论 0赞 0
  • UISlider滑动不灵敏的话给他的height加大一点就可以!
    小小叶阅读 800评论 0赞 0
  • (一)未来 这是我来到这里的第三天。 我之所以能确定我进来了几天是因为丑陋的罗伯特都会...
    Notail阅读 424评论 0赞 1
  • 报过语姐课的人都知道,以前我也是语姐的粉丝。2016年10月,语姐开设第一期“生活逻辑课”,果断报名参加,在学习课...
    十七碎碎念阅读 574评论 1赞 2

友情链接更多精彩内容