git的基本使用!git基本命令总结

Git !


前记

首先感谢这个免费学习地址:https://www.liaoxuefeng.com/wiki/896043488029600/896827951938304

因为工作室这边有项目了,使用了gitlab,为了以后能顺利开展团队工作,就把git基本使用看了。


一、概述
  1. git是用c语言写的
  2. 集中式和分布式版本控制系统:
    • 集中式版本控制系统:有一个“中央电脑”,里面有完整的版本库,每个人从中拿一部分修改后提交上去
    • 分布式版本控制系统:每个人电脑都是完整的版本库。通常有一台电脑作为中央电脑
    • 核心区别:集中式高度依赖“中央电脑”,而分布式的“中央电脑”仅仅作为“交换方便”的目的而存在
  3. gitee和github的区别:它们都是依赖git的。git和github是两种东西,github是一个“中央”仓库(虽然git没有这个概念),负责同步所有人。
二、安装

Windows下地址:https://git-scm.com/downloads

三、概念
1、暂存区

在工作空间(Working Directory)和版本库(Repository)中间有一个暂存区(stage), 当执行add的时候,实际是先把文件加入到暂存区,commit之后才放到分支上。

如果新增了文件,但没有add操作,会显示Untracked

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        123.txt
2、修改和提交

git管理的不是文件而文件内容的修改。

第一次修改 -> git add -> 第二次修改 -> git commit

这样只会提交第一次修改。第二次修改在本地,用diff命令会显示差异。

第一次修改 -> git add -> 第二次修改 -> git add -> git commit

这样会覆盖。

四、常见命令
基础设置
  1. 修改用户/邮箱

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    
  2. 查看用户/邮箱

    $ git config user.name
    $ git config user.email
    
查看文本文件内容

$ cat 文件名

初始版本库

如果要真正使用版本控制系统,就要以纯文本方式编写文件,图片、视频等只能知道其变化了(如大小),但不知道变化了什么。

# 在一个目录下:
$ git init
添加

添加到仓库要两步,一是添加,二是提交。所以添加可以添加多个文件,反正还没提交。

$ git add file1.txt
$ git add file2.txt file3.txt
提交
# m是comment注释的缩写
$ git commit -m "add 3 files."
查看状态
$ git status

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   readme.txt #提示什么文件被修改过

no changes added to commit (use "git add" and/or "git commit -a")
查看不同处

$ git diff 文件名

$ git diff readme.txt 

diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.
查看提交历史

–pretty=oneline参数是为了显示在一行内,可以不加。

前面16进制代表的是commit id(版本号),唯一的。

$ git log --pretty=oneline

2b7479aaf65d1c8a9af00adeced32b61b422815a (HEAD -> master) append GPL
7bac8f2227985f6082841a9220239bbb37184862 add distributed word
17cca483fe0624b894e78964196332d475c6ebb3 添加了readme.txt file
07c5ab54dc1438f269a7906ce0008bc8f08ad817 wrote a test1 file

查看命令历史

可以配合版本回退中的hard参数使用。

$ git reflog

2b7479a (HEAD -> master) HEAD@{0}: reset: moving to 2b7479aaf65d1c8a9af00a
7bac8f2 HEAD@{1}: reset: moving to head^
2b7479a (HEAD -> master) HEAD@{2}: commit: append GPL
7bac8f2 HEAD@{3}: commit: add distributed word
17cca48 HEAD@{4}: commit: 添加了readme.txt file
07c5ab5 HEAD@{5}: commit (initial): wrote a test1 file

版本回退
  • hard英文本意:接近。
  • head代表当前版本指针,更准确地说是版本库中的最新版本。head表示上个版本,head^表示上上版本。
  1. 回到过去

    $ git reset --hard head^
    
    HEAD is now at 7bac8f2 add distributed word
    
  2. 回到未来

    本质和回到过去是一样的,都是通过hard参数。

    注意hard参数与–之间没有空格

    $ git reset --hard 2b7479aaf65d1c8a9af00a
    
    HEAD is now at 2b7479a append GPL
    
撤消修改
  1. git checkout – 文件名。可以将工作区的修改直接丢弃,回到的版本是最近一次add或者commit的版本。
  2. 撤消暂存区的修改。$ git checkout – readme.txt。注意:仅仅只是把暂存区的内容清理掉,不会影响工作区!
删除文件

两种方式:

一是手动删除,可以用checkout撤消修改命令恢复。(checkout实际上是用版本库或者暂存区中最新版本覆盖工作区)

二是用 g i t r m 文 件 名 的 方 式 , 但 此 时 不 能 用 c h e c k o u t 命 令 恢 复 。 git rm 文件名 的方式,但此时不能用checkout命令恢复。 gitrmcheckout git restore --staged test1.txt可以从暂存区中撤消删除,再用$ git restore test.txt从工作区中撤消删除。

恢复最高级无敌的方法是版本回退。

两种方式都可以用commit命令来提交修改,真正把版本库中的文件删除。(错,必须通过rm命令先statge一下)

五、远程仓库
1、公钥
#生成公钥命令
$ ssh-keygen -t rsa -C "youremail@example.com"

钥匙目录地址:用户目录/.ssh/id_rsa.pub为公钥,id_rsa为私钥。

完事后在github加入自己的公钥信息即可。

2、添加远程库

以gitee为例。

第一步:将远程仓库信息添加到本地

$ git remote add origin https://gitee.com/MeowSir/TestGit.git。 origin为仓库名称

第二步:将master分支推送上去

$ git push -u origin master

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。(看不懂,反正第一次之后就不用加-u 参数了!)

3、查看删除仓库

git remote -v查看远程库信息。

git remote rm 远程仓库名 通过仓库名来删除仓库。

4、克隆仓库

git clone git@gitee.com:MeowSir/clone-warehouse-test.git 在一个目录下直接使用即可。

六、分支管理
  • head指向的是当前分支
  • 而如master \ dev等,是指向提交
查看分支

*号代表head指向的当前分支

$ git branch

  dev
* master

创建分支

git branch 分支名

转换分支

git checkout 分支名

新版本git中

git switch 分支名

创建与转换

git branch -b 分支名

git switch -c 分支名

这两个命令相当于创建与转换同时进行。

删除分支

git branch -d 分支名

-D代表强制删除。

合并分支

$ git merge 指定分支名

注意合并的关系:

  • 是将指定的分支名合并到当前分支
  • 是Fast-forward模式,代表着仅仅是将当前分支指针指向要合并的分支上
查看合并情况

$ git log --graph --pretty=oneline --abbrev-commit

$ git log

no-ff合并

$ git merge --no-ff -m "merge with no-ff" dev

Git默认会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息(分支就是一个指针,删除分支就是把那个指针删了,相当于该分支不存在)。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

可以这样理解:–no–ff 模式其实就是相当于master指针new了一个跟dev指针一样的空间并且放了相同的内容然后指向这个空间。而原来的快速模式,就是简单将master指针指向dev指针指向的内容而已,并没有自己创造空间。

(不太理解这样有什么用)

保留当前状态

为什么要保留当前状态?当其它分支出现问题,需要去其它分支,但当前分支中已经有修改过的内容,但没有提交。

git stash

git stash list 查看所有stash过的状态

git stash apply stash@{数字} 恢复

git stash apply 恢复到最新一次状态

git stash drop 恢复完stash还在,要删除

git stash pop 自动恢复并删除

部分修改

git cherry-pick commit的id 会把commitID下的分支作的修改部分merge过来

多人协作(重点)

origin/dev代表远程分支,dev代表本地分支名

创建远程分支:

git checkout -b dev origin/dev

推送指定分支:

git push origin dev

pull指定分支:

git branch --set-upstream-to=origin/dev dev

rebase

懒得看。。

六、标签管理
  • 标签是指向某个commit的指针
  • 标签是死的,只能指向一个特定的commit
  • 用标签是为了给commit起别名
  • 标签和commit的id挂勾,如果两个分支有相同commit的id,则标签一样
生成标签

git tag v1.0最近的一次commit打上标签

查看所有标签

git tag

指定commit打标签

git tag v0.9 commit的id

查看标签详情

git show 标签名

带说明的标签

git tag -a 标签名 -m "version 0.1 released" commit的id

删除本地标签

git tag -d 标签名

推送到远程仓库

git push orgin 标签名

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

删除远程标签

先从本地删除。

$ git push origin :refs/tags/标签名

七、还没看的

感觉暂时用不上,就不看了。

rebase命令,自定义Git,使用Source Tree

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Meow_Sir

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

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

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

打赏作者

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

抵扣说明:

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

余额充值