Git笔记详细版。【薛定谔‘.s cat的笔记】

前言:这个版本同样是我再次看了廖雪峰老师的教程又总结的笔记。如果只是简单实用,可以直接跳转到简单版笔记。https://blog.csdn.net/m0_47812755/article/details/107066584 上手操作简单多了。

Git笔记

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

Linus(人名)创建Linux时,由于后期代码库太大,Linus无法手工管理。当时的版本控制系统要收费,不符合Linux开源的理念。(中间省略BitMover公司收回BitKeeper免费试用权。)之后Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!

一、集中式vs分布式

集中式:

  • 版本库是集中存放在中央服务器的。
  • 中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
  • 必须联网才能工作,受网速影响。

分布式:

  • 没有“中央服务器”。不需要联网。
  • 安全性高。因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。
  • 分布式版本控制系统通常也有一台充当“中央服务器”的电脑,这个服务器的作用仅仅是用来方便“交换”大家的修改。

二、安装

Linux直接 apt-get install git 就可以。

Windows从Git官网下载https://git-scm.com/downloads。

安装完成后:

 git config --global user.name "Your Name"
 git config --global user.email "email@example.com"

注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置。

三、创建

  1. 首先,找到一个合适的位置,创建空文件夹。最好不使用中文命名。
  2. 通过git init命令把这个目录变成Git可以管理的仓库。
git init

会生成.git文件夹,这个文件夹是Git来跟踪管理版本库的。勿动!

ls -ah   -- 这个目录默认是隐藏,用ls -ah命令就可以看见。

1.基础命令

git init 初始化 把这个目录变成Git可以管理的仓库

git add 添加文件

git commit -m 提交到仓库-m是提交的说明。

git status 查看状态

git push 推送到远端

git add xxx
git commit -m 'xxx'
git diff xxx

2.修改

git diff 查看修改详情

3.查看修改记录日志

git log显示从最近到最远的提交日志

如果嫌输出信息太多,可以加上--pretty=oneline参数。

git log --pretty=oneline

4.版本回退

首先确定回退版本。HEAD 是版本号: 1094adb...

  1. git reset --hard commit_id 版本回退。
  2. git log查看提交历史
  3. git reflog查看命令历史
git reset --hard HEAD^ 
  • 版本号没必要写全,前几位就可以了。可以tab补全。
  • 如果已经回退到旧版本,但是后悔了。可以用新版本的commit IDreset
  • 如果记录找不到commit ID 了 ,可以使用git reflog查看历史使用过的命令。

四、工作区和暂存区

工作区

电脑中确定存放代码的文件夹就是工作区。

版本库

隐藏目录.git是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

暂存区

git add把文件添加进去,就是把文件修改添加到暂存区。

git commit就是把暂存区的所有内容提交到当前分支。

git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别

五、撤销修改

git checkout -- file可以丢弃工作区的修改。把文件在工作区的修改全部撤销。

git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区。

六、删除

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

git rm xxx 删除文件

七、远程仓库

创建好github仓库。第一次使用github需要添加ssh秘钥。

关联一个远程库:git remote add origin git@server-name:path/repo-name.git

git push -u origin master第一次推送master分支的所有内容

本地提交后,就可以使用命令git push origin master推送最新修改

个人感觉还是git clone方便一点。可能廖雪峰老师的git教程比较老了,他的方法可能会出现一些别的问题。可以参考之前的笔记:

https://blog.csdn.net/m0_47812755/article/details/107066584 没有介绍很详细,但是操作起来会很简单。

八、分支

创建分支

git branch (branchname)

切换分支

git checkout (branchname)

合并分支

git merge --no-ff 用于合并指定分支到当前分支。

git merge --no-ff -m "merge with no-ff" dev  -- 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
  • 禁用Fast forward模式,加上--no-ff参数就可以用普通模式合并
  • 默认情况下Git会用Fast forward模式,这种模式下,删除分支后,会丢掉分支信息。
  • 当Git无法自动合并分支时,就必须首先解决冲突(手动解决)。解决冲突后,再提交。

例子: git merge test 合并完后就可以删除分支:

列出分支

git branch 没有参数时,git branch 会列出你在本地的分支。 当前分支前面会标一个*号。

分支合并图

git log --graph命令可以看到分支合并图。

创建新分支并立即切换到该分支下

git checkout -b (branchname)

删除分支

git branch -d (branchname)

如果是未合并的分支,删除时会提示。

可以通过git branch -D <name>强行删除分支。

switch

创建并切换到新的分支

git switch -c dev

直接切换到已有的master分支

git switch master

分支命令小结(全)

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>或者git switch <name>

创建+切换分支:git checkout -b <name>或者git switch -c <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

Bug分支

修复bug时,手头还有工作没做完,但需要先修复bug。先git stash保存一下,切到主分支。从主分支创建新的分支,解决完bug和主分支合并。删除掉bug分支,切回之前的工作。

git stash list找到之前保存的工作,再git stash pop,回到工作现场。

因为bug是主分支之前产生的,我们手头正在工作的分支也是从产生bug的主分支切出来的,所以需要把手头工作的分支上的bug也解决一下。

git cherry-pick <commit> 找到主分支解决bug后的commit编号,当前分支用git cherry-pick 这个命令复制一个特定的提交。手头工作分支的bug也就解决了。

多人协作

git remote origin 查看远程库的信息。远程仓库的默认名称是origin

git remote -v显示更详细的信息。

下面的实例如果没看懂,跳转到原教程网页看一遍详细的案例:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

变基

git rebase

  • rebase操作可以把本地未push的分叉提交历史整理成直线;
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

九、标签

1.作用

为了方便找到commit。因为commit编号不好记,可以通过添加tag更容易找到想要的commit。

2.创建标签

切换到需要打标签的分支上,git tag <name>就可以打一个新标签。默认标签是打在最新提交的commit上的。

git tag查看所有标签。

git tag v0.9 f52c633 找到对应的commit ID 也可以加标签。

git show <tagname>查看标签信息。

git tag -a v0.1 -m "version 0.1 released" 1094adb-a指定标签名,-m指定说明文字。

3.操作标签

git tag -d v0.1 删除标签。

git push origin <tagname> 推送某个标签到远程。

git push origin --tags 一次性推送全部尚未推送到远程的本地标签。

推送到远程的标签,需要先删除本地标签,git tag -d v0.9 ,然后再删除远程标签。git push origin :refs/tags/v0.9 To github.com:michaelliao/learngit.git github地址换成自己的。

  • 命令git push origin <tagname>可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d <tagname>可以删除一个本地标签;
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

十、忽略特殊文件

不需要从头写.gitignore文件,所有配置文件可以直接在线浏览:https://github.com/github/gitignore组合一下就可以使用。

忽略文件的原则是:

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

git check-ignore检查.gitignore文件。

十一、搭建Git服务器

因为大概率用不到,所以这章没看。https://www.liaoxuefeng.com/wiki/896043488029600/899998870925664用到再看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值