Git学习

Git

下载和安装

下载地址:https://git-scm.com/download/win

安装参考链接:自行搜索

工作流程

Git工作区域

graph TB; A["工作区域(Working Directory)"] A1["添加、编辑、修改文件等操作"] B["暂存区(Staging Area)——索引"] B1["暂存已经修改的文件最后统一提交到git仓库中"] C["Git Repository(Git仓库)"] C1["最终确定的文件保存到仓库,成为一个新的版本并且对他人可见"] A ---A1 B ---B1 C ---C1 A --->B B --->C
graph TB; A["工作区域(Working Directory)"] B["暂存区"] C["Git Repository(Git仓库)"] D["git status"] D1["git status"] D2["git status"] A --"git add hello.php"-->B B --"git commot -m '提交描述'"-->C D -->D1 D1 -->D2

第一步 初始化基本信息

#1.设置用户名
git config --global user.name 'itcast'

#2.设置用户名邮箱
git config --global user.name 'itcast@qq.com'

#3.查看设置
git config --list

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


第二步 初始化一个新的Git仓库

  1. 创建文件夹

    mkdir test
    
  2. 在文件夹创建git仓库

    cd test
    git init
    

    会生成.git文件如果看不见则设置电脑显示隐藏文件

  3. 向仓库添加文件

    touch a1.php
    
    git status
    
    #添加到暂存区
    git add a1.php
    
    git status
    
    #将文件从暂存区提交到仓库
    git commoy -m 'add a1.php'
    
    git status
    
  4. 修改仓库文件

    git add a1.php
    
    git status
    
    git commit -m 'edit a1.php'
    
    git status
    
  5. 删除仓库文件

    #删除文件
    rm test.php
    
    #从Git中删除文件
    git rm test.php
    
    #提交操作
    git commit -m '提交描述'
    

第三步 将本地仓库同步到git远程仓库

  1. Git克隆操作

    git clone 仓库地址
    

    多学一招:仓库地址由来,Clone to clipboard

  2. 将本地仓库同步到git远程仓库中

    git push
    

    注:思考无法同步

拉取远程仓库

#1.查看所有远程仓库
git remote -v
#2.pull拉取是拉取加合并 pull = fetch + merge
git pull
#3.fetch拉取origin,master分支操作
git fetch origin master
git fetch origin main
#在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
git fetch origin main:tmp
#比较本地代码与刚刚从远程下载下来的代码的区别
git diff tmp
#合并tmp分支到本地的master分支
git merge tmp
git rebase tmp
#删除分支tmp
git branch -d tmp
#4.远程分支next要与当前分支合并
git pull origin next
#5.合并需要采用rebase模式
git pull --rebase origin master

分支

分支与分支之间相互独立,同时拥有自己的历史记录

分支的建立是在基于当前分支版本进行创建

新的分支的head指针指向当前最后一次提交

创建删除分支

#1.建立 feature1 分支
git branch feature1
#2.查看分支
git branch
#查看远程分支
git branch -r
#3.切换分支到 feature1
git checkout feature1
#4.建立并切换分支到 feature3
git checkout -b feature3
#5.删除分支 feature1
git branch -d  feature1
#6.重命名分支
git branch -m old new
#7.强制重命名当前分支
git branch -M new
#8.删除远程分支名 feature1
git push origin :feature1
#9.将本地分支名 master 推送到远程分支 main
git push origin master:main

脚下留心:github使用main不是master,命令git branch -M main

合并分支

#当前分支与f1比较
git diff f1

#1.合并分支f1 fast-forward(快进)合并  默认--ff
git merge f1
#2.合并分支f1 并记录这次合并 --no-ff 
git merge f1 --no-ff
#3.重写项目历史,不会带来一次提交。但是会带来问题:提交记录省略
git rebase f1
#4.查看差异
git mergetool

脚下留心:

  1. merge关注点:历史的提交记录。
  2. merge是合并操作。
  3. rebase关注点:项目过程发生了什么。
  4. rebase是:将当前分支所做修改复制到,目标分支的最后一次提交上。
  5. rebase的黄金法则是,绝对不要在公共分支上使用rebase。

日志

git log
#一行展示
git --oneline
#一行展示 只看前3条
git --oneline -3
#展示某次版本的提交 版本号:8daf306
git show 8daf306

撤销

注:提交到远程仓库,不可逆。

1.撤销/丢弃最近修改

是否暂存区 是否远程仓库 命令 描述
git checkout -- readme.txt 撤销文件readme.txt修改
git checkout -- readme.txt 撤销修改就回到添加到暂存区后的状态

回到最近一次git commitgit add

git checkout -- readme.txt

2.撤销暂存区修改

是否暂存区 是否远程仓库 命令(注意大写) 描述
git reset HEAD readme.txt
git status
暂存区的修改回退到工作区
撤销暂存区的修改

版本回退/回滚操作

命令 工作区 暂存区 描述
git reset –-soft HEAD^ 已修改 已修改 只回退了commit提交
^代表一次 ~5代表5次 版本号也可以
git reset --mixed HEAD^ 已修改 未修改 回退了add和commit默认
git reset -–hard HEAD^ 未修改 未修改 彻底回退到某个版本
一定要小心
提交的修改和本地文件的修改都会被清楚
git revert 产生一个新的commit
将回退作为一次修改记录提交
好处是不修改历史提交记录
主分支使用
是版本号

删除

1.当需要删除暂存区或分支上的文件,同时工作区不需要这个文件

这个文件没了

git rm fileName

2.当需要删除暂存区或分支上的文件,同时工作区需要这个文件,但是不需要被版本控制

这个文件不在暂存区了,工作区还有

git rm --cache fileName

忽略文件

新建一个名称为.gitignore的文件

# 忽略指定文件
HelloWrold.class

# 忽略指定文件夹
bin/
bin/gen/

#不忽略txt文件
!*.txt

自动生成项目忽略文件

  1. www.gitignore.io

  2. https://www.toptal.com/developers/gitignore

代理

git的代理

git config --global http.proxy 'socks5://127.0.0.1:1080' 

git config --global https.proxy 'socks5://127.0.0.1:1080'

github的代理

#只对github.com
git config --global http.https://github.com.proxy socks5://127.0.0.1:1080

#取消代理
git config --global --unset http.https://github.com.proxy

查看配置

cat ~/.gitconfig

认证

https方式:

每次push(提交)都需要验证用户名和密码。

ssh方式:

首先你必须是该项目的管理者或拥有者,并且需要配置个人的ssh key下。

#1.生成SSH KEY
ssh-keygen -t rsa -C "yourmail@gmail.com"
#2.SSH KEY位置
cd ~/.ssh 
ls
#.pub是公钥

多ssh key管理请参考Git安装及SSH Key管理之Windows篇

GitHub CLI:

第一方命令行工具,可以通过命令行与GitHub对接。参考链接

Git工作流:

  1. 集中式工作流

    都使用同一分支

  2. 功能分支工作流

    每个人开一个自己的分支,进行提交合并操作

    使用Pull Request,通知他人你修改了代码

    "Pull Request 是一种通知机制。你修改了他人的代码,将你的修改通知原来的作者,希望他合并你的修改,这就是 Pull Request。"

  3. Gitflow工作流

    主分支:版本迭代,正式发布历史

    开发分支:功能分支工作流中的master

  4. Forking工作流

    使用个人账号,进行fork仓库,修改后使用Pull Request,告知主仓库作者,修改内容

参考连接:https://github.com/WenzhengLi/my-git/blob/master/git-workflow-tutorial.md

CMD命令

常用命令

命令 用途
ls 当前文件目录
ll 当前文件目录,详细
pwd 当前工作目录
cls 清屏
mkdir test 新建文件夹test
cd test 进入文件夹test
cd .. 返回上一级
touch a1.php 新建a1.php文件

CMD命令之vi操作文件

命令 用途
vi a1.php 编辑a1.php文件
i/insert 输入内容
esc 退出输入
:w 保存
:q 退出vi
:wq 保存并退出文件
:set nu 显示行号
:set nonu 取消行号

Git命令

Git常用命令

命令 用途
git version git版本
git config --global user.name 'itcast' 配置git的用户名为‘itcast’
--global是全局参数
git config --global user.email 'itcast@qq.com' 配置git的邮箱为'itcast@qq.com'
cat ~/.gitconfig 查看目前的配置
git log 历史记录
git reflog 记录每一次命令
git init 初始化git仓库
默认master分支
git status git仓库状态
git add “README.md” 添加“README.md”到暂存区
git add -A 添加git目录所有文件到暂存区
git rm “README.md” 删除暂存区或分支上的文件
同时工作区不需要这个文件
git rm --cache “README.md” 删除暂存区或分支上的文件
同时工作区需要这个文件,但是不需要被版本控制
git commit -m "add README.md" 提交暂存区文件到git本地仓库
git remote add origin https://github.com/Zero-three/Test.git 添加远程仓库https://github.com/Zero-three/Test
origin远程仓库名
git remote -v 所有远程仓库
git push origin master 推送本地git仓库到远程仓库
git push origin master -u 记录远程仓库名分支
之后只用git push即可提交
git clone https://github.com/Zero-three/Test.git 将远程仓库代码克隆到本地
git clone https://github.com/Zero-three/Test.git test-demo 将远程仓库代码克隆到本地目录的test-demo文件夹下
git pull 拉去远程仓库代码
clear 清屏

Git简称

命令 命令简称 git命令
status st git config --global alias.st status
checkout co git config --global alias.co checkout
commit ci git config --global alias.ci commit
branch br git config --global alias.br branch

Git小技巧

  1. git add

    #无论在哪个目录执行都会提交相应文件
    .git add all
    .git add -A
    #只能够提交当前目录或者它后代目录下相应文件
    .git add .
    
    
原文地址:https://www.cnblogs.com/WenzhengLi/p/14296806.html