Git 学习笔记

Git 学习笔记

Linux 操作系统的作者 Linus 用 C语言开发了分布式版本控制系统——Git。

所有的版本控制系统都只能跟踪文本文件的改动,比如 txt 文件、网页及所有的程序代码文件等。


集中式 vs 分布式

版本库又称仓库,英文名“repository”,可以简单理解为项目目录,其中的所有文件都会被 Git 管理起来。

集中式版本控制

集中式版本库集中存放在中央服务器,工作时先从中央服务器取得最新版本的内容到本地计算机,完成后再将本地计算机中的内容推送至中央服务器。
集中式版本控制系统
缺点:工作时必须联网,且网速受限时工作效率极低;容灾安全性低。

分布式版本控制

分布式版本控制系统中没有中央服务器概念,每台计算机中都保存完整的版本库,当不同计算机针对不同内容进行修改时,只需要将本机修改后的内容推送给其它计算机即可。由于每台计算机中都保存了完整的版本库,因此其容灾能力相比于集中式版本控制有了很大地提升。

为保证各种情况下的版本推送成功率,实际在使用分布式版本控制系统时通常也会存在一台充当“中央服务器”的计算机,但这台计算机的作用仅仅是为了方便交换各机器的版本修改,没有它本地机也同样可以正常工作,只是交换修改不方便而已。
分布式版本控制系统


本地仓库

安装

安装Git——廖雪峰的官方网站

工作区与缓存区

Git分区

  • 工作区(Working Directory):本地项目目录;

  • 版本库(Repository):工作区中的“.git”目录,其中包含暂存区“stage”和自动创建的第一个分支“master”。

创建版本库并提交修改

  1. 终端/命令行进入项目根目录;

  2. 使用git init命令初始化当前目录为一个 Git 仓库(目录中会增加一个隐藏目录“.git”);

    $ git init
    
  3. 对仓库中的文件进行添加/修改;

  4. 使用git add命令将修改添加到本地仓库暂存区(执行后无提示即代表成功);

    $ git add 文件名.扩展名
    
  5. 使用git commit命令将之前的全部修改**(暂存区中的内容)提交到本地仓库当前分支**。

    $ git commit -m "备注信息"
    

状态查看

使用git status命令查看当前工作区及版本库的状态;

$ git status

使用git diff命令查看具体文件修改的具体内容。

$ git diff 文件名.扩展名

撤销修改

使用git checkout命令撤销工作区的全部修改(回到最近一次 git commit 或 git add 的状态);

$ git checkout -- 文件名.扩展名

使用git reset命令撤销暂存区的全部修改并回退到工作区。

$ git reset HEAD 文件名.扩展名

版本回退

使用git log命令查看 commit 历史纪录及对应版本库的版本号;

$ git log

使用git reflog命令查看历史命令记录及对应版本库的版本号;

$ git reflog

使用git reset命令回退分支版本(HEAD 表示当前版本,HEAD^ 表示上一个版本,HEAD~100 表示上一百个版本);

$ git reset --hard 版本号或HEAD^

Git 的版本回退速度非常快,因为 Git 在内部维护了一个指向当前版本的 HEAD 指针,当回退版本时仅仅是把 HEAD 从指向当前版本改为指向之前的某个版本,并更新工作区的文件而已。

删除文件

使用git rm命令删除文件。

$ git rm 文件名.扩展名

远程仓库

连接

连接远程仓库——廖雪峰的官方网站

master 分支管理

使用git clone命令从远程仓库克隆本地仓库;

$ git clone SSH地址

使用git remote命令将本地仓库与远程仓库“origin”进行关联;

$ git remote add origin SSH地址

使用git remote命令查看远程仓库;

$ git remote -v

使用git push命令向远程仓库推送版本内容(首次使用加“-u”)。

$ git push -u origin master

非 master 分支管理

使用git checkout命令从远程仓库克隆本地仓库;

$ git checkout -b 分支名 origin/分支名

使用“git branch”命令将本地仓库与远程仓库“origin”进行关联。

$ git branch --set-upstream-to=origin/分支名 分支名

分支管理

Git 会把每次提交都串成一条时间线,这条时间线就是一个分支,在 Git 里有一个分支叫主分支,即 master 分支。HEAD 严格来说不是指向提交,而是指向 master,而 master 指向提交,所以 HEAD 指向的是当前分支
HEAD指示示意图

查看、创建、合并与删除分支

使用git branch命令查看当前分支;

$ git branch

使用git branch命令创建新分支;

$ git branch dev

使用git switch命令切换到新分支;

$ git switch dev

使用git switch命令创建新分支并切换当前分支;

$ git switch -c dev

Git 会新建了一个 dev 指针并指向与 master 相同的提交,再把 HEAD 指向 dev 就表示当前分支在 dev 上:
创建新分支
Git 创建一个新分支很快,因为除了增加一个新的分支指针并修改 HEAD 的指向,工作区的文件实则没有发生任何变化。

之后修改新分支 dev 的情况就类似于:
修改新分支
使用git merge命令合并指定分支到当前分支;

$ git merge dev

实际就是将 master 指向 dev,因此速度也很快:
合并分支
使用git branch命令删除分支(“-D”为强制删除一个未被合并过的分支);

$ git branch -d dev

实际就是删除对应的分支指针 dev:
删除分支

暂存与还原工作区

使用git stash命令暂存工作区;

$ git stash

使用git stash list命令查看暂存的工作区;

$ git stash list

使用git stash apply命令恢复工作区;

$ git stash apply 暂存记录ID

使用git stash drop命令删除暂存工作区内容;

$ git stash drop 暂存记录ID

使用git stash pop命令恢复工作区并删除暂存工作区内容;

$ git stash pop

使用git cherry-pick命令复制一次提交到当前分支。

$ git cherry-pick commit_id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bean_96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值