Git入门、常用命令总结

Git入门

参考资料

https://www.imooc.com/learn/1052
https://www.liaoxuefeng.com/
https://www.cnblogs.com/qdhxhz/p/9757390.html

Git简介

  • 概念
    Git 是一个开源的分布式版本控制系统。

    版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。(快照)

  • 集中式VS分布式
    版本控制系统分为集中式版本控制系统、分布式版本控制系统

    集中式
    中央服务器保存所有文件的修订版本,其他设备工作时从中央服务器取出最新版本,然后改完后,传回去。
    集中化的版本控制系统存放的是项目版本与版本之间的差异
    中央服务器挂了?
    来源:https://www.liaoxuefeng.com/

    分布式:
    每一个服务器都有一个把代码仓库完整地镜像下来,而不是只有最新版本。
    分布式的版本控制系统存的是索引
    来源:https://www.liaoxuefeng.com/图片来源:https://www.liaoxuefeng.com/

  • git仓库结构
    图片来源:https://www.imooc.com/learn/1052
    图片来源:https://www.cnblogs.com/qdhxhz/p/9757390.html HEAD:指向 master 的一个指针
    workspace:工作区
    index:暂存区/缓存区
    repository:本地仓库
    remote repository:远程仓库

下载安装

git官网下载地址:
https://git-scm.com/downloads

本地仓库

操作目录

#新建一个新目录
$ mkdir demo3
#查看当前所在目录绝对路径
$ pwd
/d/Java/MyRepositories/demo3

#进入目录
$ cd ../   #返回上一级
$ cd demo3  #进入demo3
#列出目录下所有文件,加上-a显示隐藏文件
$ ls -a
./  ../  .git/  test1.txt  test2.txt
#列出当前文件或目录的详细信息(等价于 ls -l)
$ ll
total 2
-rw-r--r-- 1 Mathilda 197121 11  9月  3 18:13 test1.txt
-rw-r--r-- 1 Mathilda 197121 12  9月  3 18:14 test2.txt

配置 config

  • 设置、查看账户(用户名和邮箱)
  • 安装完成后立即配置
#设置账户
$ git config --global user.name "tom"
$ git config --glabal user.email "tom@163.com"
#查看账户
$ git config --list

初始化 init

  • 初始化本地仓库(即把这个目录变成Git可以管理的仓库)
$ git init

增加、查看文件 touch, echo, cat

  • 操作本地仓库文件
#新建文件
$ touch test3.txt
#把“first test”追加到test1.txt中(没有时,先自动创建该文件,并追加内容)echo
$ echo "first test1" >> test1.txt
#查看文件内容cat
$ cat test1.txt
first test1

提交文件 add, commit

  • 提交文件到本地仓库
#从工作区添加到暂存区add
$ git add test1.txt
#从暂存区提交到本地仓库commit
#   -m "fisrt commit" 提交说明,必须要有!
$ git commit -m "fisrt commit"  
[master (root-commit) 313e2b0] fisrt commit
 1 file changed, 1 insertion(+)
 create mode 100644 test1.txt

1、可以先多次add,最后一起commit
2、有多个文件添加进了暂存区,只提交一个文件时,最后要加上对应文件名
$ git commit -m “fisrt commit” test1.txt

状态 status

  • 查看当前分支的工作区和暂存区的状态
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test2.txt
        
On branch master
nothing to commit, working tree clean

uncommited:已有的,刚被修改尚未提交的
untracked:未跟踪的,不参与版本控制

历史 log,reflog

  • 查看历史
#查看提交历史log
$ git log
#查看提交历史(在一行显示)
$ git log --pretty=oneline
#查看提交历史(在一行显示,更简洁)
$ git log --oneline

#查看命令历史reflog
$ git reflog

1、由近到远
2、使用场景不同:
·回退到以前版本,用git log可以查看提交历史,以便确定要回退到哪个版本
·要恢复到未来版本,用git reflog查看命令历史,以便确定要恢复到未来的哪个版本
3、空格:下一页 b:上一页 q:退出

版本回退 reset

  • 版本回退
#指针不动,回退到暂存区
$ git reset HEAD
#指针移动,回退到上一个版本
$ git reset --hard HEAD^
#指针移动,回退到上上个版本
$ git reset --hard HEAD^^
#指针指向d85a888,回退到暂存区和工作区
$ git reset --hard d85a888

HEAD is now at 313e2b0 fisrt commit

1、HEAD指向当前版本
2、三个参数:
–mixed 默认参数,表示指针移动的同时,重置暂存区,工作区不动
–hard 表示本地库的指针移动的同时,重置暂存区,重置工作区
–soft 表示指针移动的同时,暂存区,工作区都不动

比较 diff

  • 比较文件修改
#查看单个文件的修改情况(工作区与暂存区比较)
$ git diff test1.txt

#查看所有文件的修改情况(工作区与暂存区比较)
$ git diff

#查看单个文件修改情况(工作区与本地仓库比较)
git diff 历史版本 文件名
$ git diff 313e2b07f759a30a139a8a39bef46e1e085cb318 "test1.txt"
$ git diff HEAD test1.txt

撤销修改 reset, checkout

  • 撤销修改
#丢弃已添加到暂存区的修改,恢复到添加到暂存区前的状态
$  git reset HEAD test1.txt
#丢弃工作区修改,恢复到文件修改前状态(用版本库里的版本替换工作区的版本)
$  git checkout -- test1.txt

1、三种情况下的撤销操作:
(1)修改了工作区文件:用命令git checkout – file
(2)修改文件已添加到暂存区:分两步,第一步用命令git reset HEAD ,就回到了(1),第二步按(1)步骤操作。
(3)修改文件已提交到本地仓库:详见上面版本回退

删除 rm

  • 删除文件
$ rm test2.txt
$ git rm test1.txt

删除命令rm VS git rm详解:
https://blog.csdn.net/qq_42780289/article/details/98353792

  • 找回删除文件
    与版本回退同理

远程仓库

在这里插入图片描述

SSH公钥

生成、查看本机SSH公钥:
https://www.runoob.com/w3cnote/view-ssh-public-key.html

关联远程仓库

  • 关联 add
$ git remote add origin 远程仓库的SSH/HTTPS地址
  • 删除(取消关联)rm
$ git remote rm origin

1、其中orgin是远程仓库默认名称。若想使用其他名字,直接替换掉orgin即可
eg:$ git remote add github 远程仓库的SSH/HTTPS地址
2、若本地仓库需关联多个远程仓库的时候,利用不同的远程仓库名进行区分
$ git remote add github 远程仓库的SSH/HTTPS地址
$ git remote add gitee 远程仓库的SSH/HTTPS地址

  • 查看本地仓库关联的远程仓库信息 -v
$ git remote -v

推送 push

git push 远程仓库名 本地分支名
#第一次把本地仓库master分支推送到远程仓库orgin中(必须加上 -u)
$ git push -u origin master
#推送操作
$ git push origin master
#强制push(远程仓库会丢失,慎用)
$ git push -u origin master -f 

push时可能出现的错误
$ git push origin master
To github.com:michaelliao/learngit.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to ‘git@github.com:michaelliao/learngit.git’
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push --help’ for details.
解决办法:
先pull, 再push

拉取 pull

#远程分支orgin与当前分支合并
$ git pull origin master
#git 默认拒绝合并无关的历史 fatal: refusing to merge unrelated histories  在git push, git merge时也可能出现
#加上--allow-unrelated-histories,允许合并不相关的历史
$ git pull origin master --allow-unrelated-histories

运行 $ git pull origin master --allow-unrelated-histories时,会进入如下页面,该页面显示“请输入提交消息来解释为什么这种合并是必要的”。
若想直接退出,直接输入 :wq
在这里插入图片描述

克隆 clone

$ git clone 远程仓库的SSH/HTTPS地址

默认情况下,从远程clone到本地的库只能看到master分支

分支管理

在这里插入图片描述

查看分支

$ git branch

新建

$ git branch dev

切换分支

$ git checkout dev
$ git switch dev

新建并切换

$ git checkout -b dev
$ git switch -c dev

删除

$ git branch -d dev

合并分支

$ git merge feature

解决合并冲突

详见https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值