1. git简介

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

版本控制系统发展可分三个阶段:本地版本控制系统 -> 集中式版本控制系统 -> 分布式版本控制系统。

2.git安装

打开git官方网站(https://git-scm.com/download/win)选择相应的版本下载即可。

git环境配置:
通常情况下,只需配置一次git,当git程序升级时会保留配置信息。不过可以运行 git config 命令来修改。

git config 命令配置用户信息:
git config --global user.name 'wl'
git config --global user.email 'wl@qq.com'

注意: 如果使用了 --global选项,意味着是全局配置。如果想在特定项目中使用不同的用户名称,可以在那个项目目录下运行没有--global
选项的命令来配置。

查看配置信息: git config --list
也可使用 git config <key> 查看某一项配置,eg: git config user.name

git颜色配置: git config --global color.ui true

git忽略文件配置: 在工作区根目录下创建一个 .gitignore 文件,然后把要忽略的文件名填进去即可。
1. 忽略文件规则如下:
.gitignore文件
# xx:
//排除所有.开头的隐藏文件
.*
// 排除所有.js文件
*.js
//不排除.gitignore 和 remember.class:
!.gitignore
!.remember.class
2.强制添加被忽略的文件 git add -f xx.js
3.把指定文件排除在 .gitignore 规则外的写法是: !+文件名
git配置别名:
git config --global wl.co checkout
git config --global wl.ci commit
git config --global wl.br branch
最后输入:git ci -m 'sth.'

配置git log -1:
配置一个git last,显示最后一次提交信息:
git config --global wl.last 'log-1'
然后输入: git last 就可以显示最近一次提交记录。

3.git使用

在文件目录中初始化仓库:  git init

克隆仓库: git clone <url>
自定义本地仓库名称: git clone <url> newName

编辑并添加文件:
创建一个index.txt文件,内容如下:
hello git;
hello world;
把文件添加到仓库: git add index.txt
提交更改到仓库: git commit -m '创建了一个index.txt文件'

查看git仓库当前状态变化:
接下来继续修改index.txt文件,如下:
hello git;
hello world;
hello everyone;
查看git status结果: git status

比较变动: git diff index.txt
查看日志: git log --pretty=oneline**
查看全部commit记录: git log

git 回退:
git reset --hard HEAD^ (回退到上一个版本)
git reset --hard HEAD^^(回退到上上个版本)
git reset --hard HEAD~10 (回退到10个版本之前)

git 重置:
记录每一次命令:git reflog ,通过这个命令找到对应的commitid,然后使用 git reset --hard commitId 切换到最新的版本上了。

工作区和暂存区:
工作区:就是用户电脑里能看到的目录;
版本库: 工作区有一个隐藏目录 .git。
git版本库里存放了很多东西,其中最重要的就是称为 stage(或者叫index)的暂存区,还有git自动创建的第一个分支master,以及指向
master的一个指针叫HEAD。

即:当把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,即把文件修改添加到暂存区;
第二步是用git commit提交更改,即把暂存区的所有内容提交到当前分支。

4.版本管理

撤销修改 (git commit --amend):
当我们提交文件完后发现漏掉了几个文件未提交,或者提交信息写错了,此时,就可以运行带有 --amend选项的命令来重新提交
使用场景:
git add index.txt
git commit -m 'commit index.txt'
git add forgot.txt
git commit --amend
结果是:最终只会有一个提交(第二次提交将代替第一次提交的结果)。

取消暂存的文件(git reset):
git reset HEAD readme.txt

撤销对文件的修改(git --checkout):
git checkout -- index.txt
显示结果: 文件中的修改已经被撤销了。

删除文件:
使用 rm 命令删除: rm index.txt
或者先用 git rm index.txt 再使用 rm index.txt 命令删除即可

特殊情况,把误删的文件恢复到最新版本: git checkout -- index.txt

5.分支管理

 完成提交代码分支流程:
1.首先,创建dev分支,然后切换到dev分支:
git checkout -b dev

2.使用 git branch 命令查看当前分支:
git branch

3.在dev分支上面做修改并提交:
git add readme.txt
git commit -m 'xxx'

4.现在切换到 master分支:
git checkout master
5.把dev分支的代码合并到master分支上:
git merge dev
[git merge 命令用于合并指定分支到当前分支。]
6.合并完成后,可以删除dev分支了:
git branch -d dev
7.删除后,查看branch,
git branch

由于切换分支使用 git checkout <branch>,而撤销修改则是 git checkout -- <file>,tong
创建并切换到新的dev分支,可以使用:
git switch -c dev
直接切换到已有的master分支,可以使用:
git switch master
合并dev分支,添加 --no-ff 参数,表示禁用 Fast forward:
git merge --no-ff -m 'merge with no-ff' dev(因为本次合并要创建一个新的commit,所以加上-m参数)

分支策略:
master分支-应该是非常稳定的,仅用来发布新版本。
dev分支-开发需求都在dev分支
feature分支-开发新功能
bug分支-每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

场景描述:假设正在dev开发功能,突然需要修改master分支bug,这时需要 把dev分支的代码储藏起来,用的命令
是 git stash; bug修复后,切回dev分支,使用 git stash pop 把储藏的代码放出来,然后就可以继续开发了.

git stash list: 查看储藏的文件区域
git stash apply stash@{0}: 可以多次stash,恢复的时候,想用git stash list查看,然后恢复指定的stash

git cherry-pick: 对于多分支代码库,将代码从一个分支转移到另一个分支上。
分两种情况,第一种是另一个分支的所有代码变动,就采用合并 git merge.
另一种是,只需要部分代码变动(某几个提交),采用 cherry pick。
git cherry-pick <commitHash>

git cherry-pick转移多个提交:
git cherry-pick A..B(转移从A到B的所有提交。且必须按照正确的顺序放置,提交A必须早于提交B,否则命令
将失败,且提交A将不会包含在cherry pick中。)

git cherry-pick A^..B (包含提交A,转移从A到B的所有提交)
git cherrry-pick <HashA> <HashB> 将A和B两个提交应用到当前分支。

git cherry-pick代码冲突:
git cherry-pick --continue: 继续执行
git cherry-pick --abort: 发生代码冲突后,放弃合并,回到操作前的样子。

推送分支:
git push origin master: 将该分支推送到master分支上

rebase: rebase操作可以把本地未push的分叉提交历史整理成直线;目的是使得我们在查看历史提交的变化时更容易.

6.git标签

创建标签,切换到需要打标签的分支上:
git branch
git checkout master
git tag v1.0(使用 git tag <name>就可以打一个新标签)
git tag: 查看所有标签

默认标签是打在最新提交的commit上的。如果忘了打标签,可以先找到历史提交的 commit id,然后使用
git tag v0.9 commit-id 即可。

如果标签打错了,使用 git tag -d v0.1 删除即可。
如果要推送某个标签到远程,使用命令 git push origin <tagname>:
git push origin v1.0
或者,一次性推送全部尚未推送到远程的本地标签:
git push origin --tags

如果标签已经推送到远程,要删除远程标签,需要先从本地删除:
git tag -d remove
然后,从远程删除即:git push origin :refs/tags/remove

参考链接:

https://edu.csdn.net/skill/gml/gml-62c30f9c31f64a1d96af732c47c93f04?category=635

git技能树总结的更多相关文章

  1. ctfhub技能树—信息泄露—git泄露—index

    打开靶机 查看页面信息 使用dirsearch进行扫描 使用githack工具处理git泄露情况 使用git log命令查看历史记录 与 add flag 9b5b58-- 这次提交进行比对 即可拿到 ...

  2. ctfhub技能树—信息泄露—git泄露—Stash

    打开靶机环境 查看页面内容 使用dirsearch进行扫描 使用Githack工具处理git泄露情况 进入.git/refs目录 发现stash文件,使用notepad++打开文件 使用git dif ...

  3. ctfhub技能树—信息泄露—git泄露—Log

    什么是git泄露? 当前大量开发人员使用git进行版本控制,对站点自动部署.如果配置不当,可能会将.git文件夹直接部署到线上环境.这就引起了git泄露漏洞. 打开靶机环境 查看网页内容 使用dirs ...

  4. PHP开发工程师-技能树

    参考进阶-PHP程序员的技术成长规划-http://blog.csdn.net/heiyeshuwu/article/details/40098043 LNMP / LAMP 环境搭建(单组件安装,非 ...

  5. Git基础及进阶-系统总结

    Git基础及进阶-系统总结 by 小强 2019-07-01 考虑到入职后不仅需要熟练掌握git的基本使用,在企业实际操作中还涉及一些进阶指令.作为一个程序员,熟练使用工具是一项基本技能,也是程序员的 ...

  6. Git 子模块 - submodule

    有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...

  7. Git 在团队中的最佳实践--如何正确使用Git Flow

    我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...

  8. Git与Repo入门

    版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...

  9. Git Bash的一些命令和配置

    查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...

  10. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net

    1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...

随机推荐

  1. 安卓逆向 利用JEB进行动态调试断点 进行内购

    1.第一步肯定是需要配置好,连接到模拟器 2.这个程序会弹出支付失败 所以我们搜索一下关键字 看到这里就很兴奋了 我们取JEB里面对这个方法进行断点 if eqz 等于0 这里 看到那个寄存器是v5 ...

  2. 加密,各种加密,耙梳加密算法(Encryption)种类以及开发场景中的运用(Python3.10)

    不用说火爆一时,全网热议的Web3.0区块链技术,也不必说诸如微信支付.支付宝支付等人们几乎每天都要使用的线上支付业务,单是一个简简单单的注册/登录功能,也和加密技术脱不了干系,本次我们耙梳各种经典的 ...

  3. JZOJ 1078. 【GDOI2006】The Kth Element

    \(\text{Problem}\) 给定一个整数序列 \(a[1..N]\),定义 \(sum[i][j]=a[i]+a[i+1]+...+a[j]\),将所有的 \(sum[i][j]\) 从小到 ...

  4. JZOJ 3432. 【GDOI2014模拟】服务器

    题目 解析 很容易想到的 \(dp\): 设 \(f_i\) 表示已经处理完 \(1..i\) 并且 \(i\) 是直接复制的需要的最小花费 那么 \(f_i=f_j+(i-j) \times (i- ...

  5. react+Native使用typeScript

    1.为什么使用typeScript? typeScript是JavaScript的超集 typeScript在编译期间就可以将错误抛出 增强代码的可阅读性和可维护性 2.案例的功能逻辑 切换职业 选择 ...

  6. Echarts 圆形立体柱状图

    先放个效果图 const resData = [ { label: "上海", value: 66 }, { label: "北京", value: 26 }, ...

  7. 了解ASP(三) -- Cookie, Session, Application

    ASP一共内建了7个对象,有Session.Application.Cookie.Response.Request.Server,这些对象都可以直接使用. 1. 什么是 Cookie? 1. cook ...

  8. springboot mybatisPlus集成shiro实现权限控制

    创建数据库表.由于时间仓促,数据库表设计不太合理,后期会更改 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ------------------- ...

  9. plugin的原理

    plugin插件的原理 扩展webpack, 加入自定义的构建行为 webpack内部的钩子 hooks tap: 可以注册同步钩子和异步钩子 tapAsync: 回调方式注册异步钩子 tapProm ...

  10. Mac 远程 屏幕共享 screen sharing

    ​ 屏幕共享可以用于在局域网中控制另一台 Mac,也能通过 iMessage 在广域网环境下创建彼此的连接,用来指导和解决问题非常方便. 通过 Apple ID 来创建连接 1,Command+空格键 ...