• Git 简介



    代码管理参考

    教程参考

    软件参考


    日志

    • 2020年08月06日14:05:08 初始版本
    • 2021年06月21日00:23:07 增加git SSH通信方式相关配置

    1、常用命令

    Git:分布式版本管理控制系统

    1.0 初始配置

    Step1:下载Git(推荐安装TortoiseGitSublime Merge);

    Step2:注册github;

    Step3:将Git和github连接起来
    (1)本地git配置邮箱和名称:打开【git bash】,输入:

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

    (2)本地生成秘钥:右键,点击【git bash】,输入命令ssh-keygen,一路回车即可。生成两个文件:

    C:Userszyjhandsome.sshid_rsa
    C:Userszyjhandsome.sshid_rsa.pub
    

    (3)github配置SSH(与本地电脑进行连接):github.com -> Setting -> SSH and GPG keys,不妨命名为ssh_20210621,复制id_rsa.pub文件中内容即可。

    (4)SSH通信方式配置

    • 打开:C:Program FilesTortoiseGitinputtygen.exeType of key to generate选择RSA,点击【load】,选择id_rsa文件,点击【Save private key】,不妨命名为zyjhandsome_private_key.ppk
    • 打开:C:Program FilesTortoiseGitinpageant.exe,点击【Add Key】,选择zyjhandsome_private_key.ppk文件,点击【Close】

    Step4:确保git和github已经连接,在需要创建项目的文件夹中,右键,点击【git bash】,输入命令:git init,会生成一个.git文件夹(隐藏文件夹);

    Step5:连接本地和github仓库,输入命令:git remote add orgin xxx (Exapmle: git@github.com:zyjhandsome/test.git);

    Step6从远程仓库下载文件到本地,输入命令:

    git pull origin master (从origin远程仓库 master分支下载文件);

    git pull upstream master (从upstream远程仓库 master分支下载文件);

    Step7将本地文件推送到github,修改文件之后
    输入命令(文件添加到暂存区):git add index.html (index.html为修改或新建的文件,可以为多个)
    输入命令(文件提交到本地仓库):git commit -m 'This is a example to commit files.'
    输入命令(文件推送到远程仓库):git push origin master

    // 1、Git安装完成之后,进行全局配置用户名和邮箱
    git config --global user.name "name"
    git config --global user.email "xxx@email.com"
    
    
    // 2、创建SSH Key,并在github中进行添加秘钥
    ssh-keygen -t rsa -C "youremail@example.com"
    ssh -T git@github.com // 判断本地和github连接是否为通的状态
    
    
    // 3.1 首次提交,提交代码到远程仓库
    echo "# test" >> README.md // 可选,新建一个README.md文件,并写入 test
    git init // 初始化版本库
    git add README.md // git add添加文件到暂存区
    git commit -m "first commit" // 提交到本地仓库中,并添加备注
    // 本地仓库和远程仓库关联起来
    git remote add origin git@github.com:zyjhandsome/test.git
    // 将文件推送到远程仓库
    git push -u origin master
    
    // 3.2 提交到一个已有的仓库中
    git remote add origin git@github.com:zyjhandsome/test.git
    git push -u origin master
    
    
    // 4、GitHub克隆到本地
    git clone git@github.com:zyjhandsome/test.git
    
    
    // 5、标签管理
    git tag // 查看所有标签
    git tag name // 创建标签
    git tag -a name -m "comment" // 指定提交信息
    git tag -d name // 删除标签
    git push origin name // 标签发布,将标签推送到远程仓库
    
    
    // 6.1 分支管理,比如开发一个项目需要两周,在一周之后,还是一个不完整的代码,为了防止替换了已经完整的代码,引入分支管理
    git branch feature_name // 创建一个分支
    git branch // 查看所有的分支(*表示当前所在的分支)
    git checkout feature_name // 切换到feature_name分支
    
    // 6.2 提交代码到分支中(首先切换到本地分支)
    git add <filename> // 添加修改后的代码到暂存区
    git commit -m "desc_xxx" // 提交到本地仓库中,并添加备注
    git status // 查看当前状态
    
    // 6.3 Merge代码到master分支
    git checkout master // 切换到master分支
    git merge feature_name // 将feature_name分支上的代码merge到master分支上
    
    // 6.4 删除本地分支代码
    git branch -d feature_name
    

    1.1 汇总

    1、工作流: 工作区 -> 暂存区 -> 版本库
    
    2、初始化(本地仓库): 
    git init // 工作区,初始化本地仓库,将当前目录配置成Git可以管理的仓库,该目录下会多出来一个`.git`文件夹
    git add <filename> // 添加<filename>文件到暂存区,告知Git,把文件添加到仓库
    git add . // 表示添加新文件和编辑过的文.
    git commit -m "xxx" // 提交到本地仓库,`-m`后面输入本次提交的说明
    
    3、关联/推送远程仓库: 
    git remote add origion <url> // 本地已有仓库关联到远程仓库(如: git@github.com:zyjhandsome/test.git))
    git pull <remote> <branch> 
        /* pull 等价于 fetch+merge */
    	/* Example1: git pull git@github.com:zyjhandsome/test.git master --allow-unrelated-histories */
        /* Example2 (fatal: refusing to merge unrelated histories 报错时,进行强制合并): git pull git@github.com:zyjhandsome/test.git master --allow-unrelated-histories */
    git push -u origin master
    
    git remote -v // 查看本地仓库与远程仓库的关联详情
    git remote remove origion // 解除与远程仓库的关联
    
    4、克隆远程仓库到本地(先选择到被选择的目录中): git clone <url> // git@github.com:zyjhandsome/test.git
    5、拉取远程仓库到本地(先选择到被选择的目录中): git pull
    6、分支管理: git branch -> git checkout -> git merge
    7、标签管理: git tag -> git push
    8、查看状态: git status
    9、比较差异性: git diff HEAD --xxx // 比较上一个版本跟当前xxx文件的差异性(暂存区的差异性)
    

    1.2 代码更新

    git pull upstream master // 从顶级库更新最新代码到本地
    
    // 如果本地已经修改代码,需要先暂存本地代码,更新之后,再Pop出来
    git stash
    git pull upstream master
    git stash pop
    
    // 如果上述操作出现了冲突,则详见下方【解决冲突】栏
    

    1.3 代码提交

    git status // 获取当前的状态
    
    git add <filename> // 添加<filename>文件到暂存区,告知Git,把文件添加到仓库
    git add . // 表示添加新文件和编辑过的文.
    git commit -m "xxx" // 提交到本地仓库,`-m`后面输入本次提交的说明
    
    git push origin master // Push代码到origin仓库的master分支
    git push -u origin master // Push代码到origin仓库的master分支
    // 当远程分支落后本地,强制推送到远端
    git push -f origin master // Push代码到origin仓库的master分支
    

    1.4 版本回退

    情形1(已经commit到本地仓库):

    // 初始化和第一次提交到本地仓库
    git init
    git add xxx
    git commint -m 'first commint'
    
    // 第二次提交
    git add xxx
    git commit -m 'second commit'
    

    回退:

    git log // 显示从最近到最远的提交日志信息
    git log --pretty=oneline // 显示简要的提交日志信息
    git reflog // 记录每一次命令
    
    git reset --hard HEAD^ // HEAD^: 回退到上个版本, HEAD^^: 回退到上上个版本, HEAD~100: 回退到上100个版本
    

    情形2(只是本地工作区进行了修改),回退方式:

    // 这里有两种情况
    // 情形1: xxx文件自然修改,还未到暂存区,执行该命令之后,撤销修改就回到和版本库一模一样的状态
    // 情形2: xxx文件已经添加到暂存区后,又做了修改,现在撤回到添加到暂存区后的状态
    git checkout -- xxx // xxx为需要回退的文件,把 xxx 文件,在工作区的修改全部撤销
    // 上面命令逐渐会替换为以下两条语句
    git restore xxx
    git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>…​
    git restore [<options>] [--source=<tree>] [--staged] [--worktree] --pathspec-from-file=<file> [--pathspec-file-nul]
    git restore (-p|--patch) [<options>] [--source=<tree>] [--staged] [--worktree] [--] [<pathspec>…​]
    

    1.5 分支管理

    本地仓库的分支管理:

    // 创建和切换分支
    git checkout -b dev // checkout 命令加上`-b`表示创建和切换
    // 上面命令逐渐会替换为以下两条语句
    git switch <分支名> 和 git switch -c <分支名> 
    
    // 相当于两条命令: `git branch dev` 和 `git checkout dev`
    git branch // 查看当前分支, 切换到dev分支,切换到主分支: `git checkout master`
    git branch -a // 查看所有分支
    git checkout <branch name> // 切换分支
    git switch <branch name> // 切换分支(推荐)
    
    git -d <branch name> // 删除本地分支
    
    // 切换到dev分支
    git checkout dev
    // 将需要提交的文件添加到dev分支的暂存区
    git add <filename> // or: `git add .`
    // 将需要提交的文件提交到dev分支的本地仓库
    git commit -m <commit comment>
    // 将dev分支内容合并到master分支
    // 首先切换到master分支
    git checkout master
    // 将dev分支的内容合并到master分支
    git merge dev
    
    // 合并完成之后,就可以删除dev分支了
    git branch -d dev
    
    // 提交到远程仓库
    git push -u origion master
    
    
    
    
    // 举例
    //  本地 -> origin (个人远程仓库) -> upstream (顶级仓库)
    //  upstream库有两个分支:master、dev-20210414
    // 情形1:upstream (顶级仓库) 新建了一个分支:dev-20210414,需要同步到本地和origin仓库,新建相应的分支
    // Step1:本地新建一个同名分支并和远程进行关联
    git checkout --track dev-20210414 // dev-20210414为分支名称
    // Step2:本地切换到dev-20210414分支
    git switch dev-20210414
    // Step3:推送和新建分支到个人远程仓库并
    git push origin dev-20210414:dev-20210414 // 推送本地的dev-20210414分支到远程origin的dev-20210414分支(没有会自动创建)
    
    
    // 情形2:修改文件A,提交到远程仓库的dev-20210414分支
    git branch // 查看当前分支,如果不是dev-20210414分支,则用命令`git switch dev-20210414`切换到需求分支
    git pull upstream dev-20210414 // 从顶级库拉取最新代码
    // 修改文件A
    git status // 查看当前状态(修改文件等)
    git add . // 暂存修改的文件
    git commit -m "Modify file of A" // 提交修改的文件
    // ** 此时本地切换到master分支,可以看到A文件又会恢复原装,仅仅在dev-20210414分支上进行了修改
    git push -u origin dev-20210414 // 推送到个人远程仓库
    // 后面就是在dev-20210414分支上正常提交到顶级库的流程
    
    
    // 情形3:需要将修改的文件同时推送到两个或多个不同的分支
    // 如需要将修改的文件A同时推送到master分支和dev-20210414分支
    // 可以先将相关更改的文件暂存起来,切换到需要提交的分支再Pop出来
    
    git branch // 查看当前分支,假设当前分支是master分支
    git pull upstream master // 从顶级库拉取最新代码
    git stash save "暂存1" // "暂存1"为自定义命名的一个暂存名称
    git stash list // 可以看到当前暂存的数据,默认 "暂存1" 会在最新的位置,即位置0
    git stash apply 0 // Pop出需要提交的文件,或者使用命令 `git stash pop` 默认弹出最新的暂存文件
    
    // 1. 提交代码到master分支
    git status // 查看当前状态(修改文件等)
    git add . // 暂存修改的文件
    git commit -m "Modify file of A" // 提交修改的文件
    git push -u origin master // 推送到个人远程仓库
    // 后面就是在master分支上正常提交到顶级库的流程
    
    
    // 2. 提交代码到dev-20210414分支
    git branch // 查看当前分支
    git pull upstream dev-20210414 // 从顶级库拉取最新代码
    git switch dev-20210414 // 切换到dev-20210414分支
    git stash list // 可以看到当前暂存的数据,默认 "暂存1" 会在最新的位置,即位置0
    git stash apply 0 // Pop出需要提交的文件,或者使用命令 `git stash pop` 默认弹出最新的暂存文件
    git status // 查看当前状态(修改文件等)
    git add . // 暂存修改的文件
    git commit -m "Modify file of A" // 提交修改的文件
    git push -u origin dev-20210414 // 推送到个人远程仓库
    // 后面就是在dev-20210414分支上正常提交到顶级库的流程
    

    1.6 解决冲突

    在VS Code中,会直接提示冲突的代码内容

    • 当前更改:当前代码库中的代码(比如:upstream)
    • 传入的更改:stashed changes(本地/本次提交的修改)
    // 创建和切换分支feature1
    git switch -c feature1
    
    // 修改Branch.txt文件
    // 内容: Hello, I am here.
    git add Branch.txt // 添加到feature1分支的暂存区
    git commit Branch.txt // 提交到feature1分支的本地仓库
    
    // 切换回主分支
    git switch master
    // 修改Branch.txt文件
    // 内容: Hello, world.
    git add Branch.txt // 添加到master分支的暂存区
    git commit Branch.txt // 提交到master分支的本地仓库
    
    git merge feature1 
        // 会产生如下冲突: 
        Auto-merging Beanch.txt
    	CONFLICT (content): Merge conflict in Beanch.txt
    	Automatic merge failed; fix conflicts and then commit the result.
        
    git status // 查看冲突内容
    // 打开Branch.txt文件,能看到冲突差异性
    vim Branch.txt
        // HEAD为主分支内容, feature1为feature1分支内容
    	<<<<<<< HEAD
    	Hello. I am here!
    	=======
    	Hello, world.
    	>>>>>>> feature1
    	
    	// 修改成:
    	Hello, world. I am here!
    
    git add Branch.txt
    git commit -m 'conflict fixed'
    
    git branch -d feature1 // 完成之后,选择性删除分支
    
    
    // Git小乌龟工具,右键 -->> 解决冲突
    

    1.7 标签管理

    2、Git工作流

    3、Sublime Merge介绍

    3.1 远程仓库更新

    1. 复制远程仓库 SSH 地址

    2. 克隆项目到本地

      git clone git@github.com:userName/`projectName`.git
      
    3. 用 Sublime Text 3 打开该项目

    4. 将文件添加到暂存区
      Ctrl + Shift + P 调起命令面板,输入Git: Add All,将文件提交至暂存区

    5. 提交注释(提交到本地版本库)
      Ctrl + Shift + P 调起命令面板,输入Git: Commit,将文件提交至版本库

      这时会弹出 提交注释的文件,在最上方输入此次更新的内容和目的,关闭该文件即自动触发提交日志操作。

    6. 将文件上传
      Ctrl + Shift + P 调起命令面板,输入Git: Push,将文件提交至版本库

    3.2 本地仓库上传

    1. 先在 https://github.com 上创建一个和本地仓库名字相同的线上仓库
      用 Sublime Text 3 打开该项目
    2. 初始化仓库
      Ctrl + Shift + P 调起命令面板,输入Git: Init,回车,确认路径,回车
    3. 用 Sublime Text 3 打开该项目
    4. 将文件添加到暂存区
      Ctrl + Shift + P 调起命令面板,输入Git: Add All,将文件提交至暂存区
    5. 提交注释(提交到本地版本库)
      Ctrl + Shift + P 调起命令面板,输入Git: Commit,将文件提交至版本库
      这时会弹出 提交日志的文件,在最上方输入此次更新的内容和目的,关闭该文件即自动触发提交日志操作。
    6. 将文件上传
      Ctrl + Shift + P 调起命令面板,输入Git: Add Remote + Remote Name (e.g., "origin"),将文件提交至版本库
    7. 将文件提交至远程版本库
      Ctrl + Shift + P 调起命令面板,输入Git: Push,回车,确认路径,回车
      报了一个错,因为没有指明远程仓库的名字和url地址

      配置远程仓库地址

      由于Sublime Text 的 Git 命令不能带参数,在 Git Bash 中完成

      git remote add origin git@github.com:userName/projectName.git

    3.3 修改Pull和Push为不同地址以及SublimeMerge的使用

    1)修改Pull和Push为不同地址

    git remote set-url origin top_stream_remote_url // top_stream_remote_url即为顶级库的地址
    git remote -v // 查看当前的远程分支情况
    git remote set-url --push origin user_remote_url // user_remote_url即为自己配置的地址,个人远程仓库(即修改推送到自己的远程仓库,再从远程仓库Merge请求到顶级库)
    git remote -v // 查看配置是否生效
    

    相关目录:

    // 推送 (Push): 
    本地 -> (右侧: Add/Stage/Stage Lines) 暂存区 -> (右侧: Commit) 本地仓库 -> (Push) 个人远程仓库 -> (Merge Request) 顶级仓库
    
    备注:(Discard/Discard Lines) 撤销
    
    // 拉取 (Pull):
    (Merge Request) 顶级仓库 -> Fetch -> (找到最新的拉取分支) Rebase Master onto this commit 
    
    // 本地修改,但不是最新代码时:
    先 (上方) Stash (git stash),再Pull(Fetch),然后再恢复修改的代码 (上方) 
    
    名词解释:
    Revert hunk: 恢复Commit之后的代码到Unstage状态
    Hunk history: 查看该文件历史提交记录
    

    2)SublimeMerge的使用

    Step1:Open Repository(打开本地仓库)

    默认:

    ​ master:本地仓库

    ​ origin:配置的(Push)远程仓库

  • 相关阅读:
    前端工程化之动态数据代理
    webapp开发之需要知道的css细节
    html-webpack-plugin详解
    file-loader引起的html-webpack-plugin坑
    浅谈react受控组件与非受控组件
    React创建组件的三种方式及其区别
    react项目开发中遇到的问题
    css伪元素:before和:after用法详解
    python之文件操作
    python之range和xrange
  • 原文地址:https://www.cnblogs.com/zyjhandsome/p/13445925.html
Copyright © 2020-2023  润新知