GIT速查手册

为什么80%的码农都做不了架构师?>>>   hot3.png

一、GIT

1.1 简单配置

git是版本控制系统,与svn不同的是git是分布式,svn是集中式

配置文件位置

# 配置文件
.git/config 当前仓库的配置文件
~/.gitconfig 全局配置文件# 查看所有配置项
git config --list

友好的查看日志

# 设置别名
# 友好的查看日志
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --all"git log --decorate --oneline --graph --all
git lg

设置用户名和邮箱

# 设置用户名和邮箱
git config --global user.name "xxx"
git config --blobal user.email "xxx@xxx.com"

1.2 工作区和暂存区

工作区(Working Directory)是当前文件夹,当前文件夹下的.git文件夹是版本库(Repository)。版本库里有很多东西,其中有

  1. 最重要的就是暂存区(stage或index)
  2. Git为我们自动创建的第一个分支master
  3. 指向master的一个指针叫HEAD

工作区--暂存区(stage/index)--当前分支(master)--远程库

关系图

版本说明

HEAD 当前版本
HEAD^ 上一版本
HEAD^^ 上上版本
HEAD~100 往上100个版本

1.3 add/commit/diff/reset

add命令

commit命令

diff命令

reset

二、常用命令

2.1 init/add/commit/status/log

init

cd learngit
git init# 在某目录下执行命令后,该目录会生成一个.git的隐藏文件夹,这个目录就是一个版本库了
# 所有版本控制系统只能跟踪文本文件的发动
# 如TXT文件中删除了第4行,图片等二进制文件作为一个整体
# 统一用UTF-8编码

add

# 添加一个文件到暂存区(Stage)
vi readme.txt
git add readme.txt

commit

# 将文件提交给HEAD
git commit -m 'wrote a readme file'# 不产生新快照的提交
git commit --amend  

查看状态

git status
# 通过该命令可以清楚的了解当前版本库中的文件处于什么状态

查看历史

git log
git log --pretty=oneline
git lg
# 自定义的一个别名,参照 简单设置git reflog
# 查看执行的每一条命令

2.2 文件对比

准备

# 工作区的readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
# 暂存区的readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files by stage.
# master的readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes.

比较工作区与暂存区中的文件

git diff -- readme.txt

比较工作区与版本库中的文件

git diff HEAD -- readme.txt

比较暂存区与版本库

git diff --cached HEAD

比较两个历史快照

git diff id1 id2

2.3 版本回退

有如下几个版本:

查看历史记录是这样的:

回退到指定版本:

git reset HEAD^/comment_id
# comment_id,ID号,前7位,可以通过git reflog和git log命令进行查看 

版本库覆盖xxx

# 工作区----暂存区(stage)----版本库(HEAD)----服务器
# 三种模式soft/mixed/hard,默认是mixed# 版本库里上一版本覆盖最新版本
git reset --soft HEAD^
# 1.移动HEAD的指向,将其指向上一个快照# 版本库上一版本覆盖最新版本和暂存区
git reset --mixed HEAD^
# 1.移动HEAD的指向,将其指向上一个快照
# 2.将HEAD移动后指向的快照回滚到暂存区域# 版本库上一版本覆盖最新版本和暂存区和工作区
git reset --hard HEAD^
# 1.移动HEAD的指向,将其指向上一个快照
# 2.将HEAD移动后指向的快照回滚到暂存区域
# 3.将暂存区域的文件还原到工作目录

暂存区覆盖工作区

# 暂存区的内容覆盖工作区(丢弃工作区的修改)
# 撤销工作区的修改
# 没有--,该命令就是切换分支的命令了
git checkout -- readme.txt

版本库覆盖暂存区

# 版本库的内容覆盖暂存区(丢弃暂存区的修改)
# 撤销暂存区的修改
git reset HEAD readme.txt

2.4 暂存区修改

这样一种场景:工作区,暂存区,版本库里内容一样,类似.project类似这种eclipse的项目配置文件也存在于版本控制中,现在把.project这类文件加入到忽略名单后

# 这个命令是把.project从暂存区中删除
git rm --cached .project
# 提交暂存区
git commit -m "delete .project"

2.5 删除/重命名

# 只能删除工作区和暂存区中的文件
git rm filename# git rm readme.txt与如下两个命令等价
rm readme.txt
git add readme.txt# 如果工作区和暂存区中的文件内容不同时,下面两个命令可把两个都删除
git rm -f filename
git rm --cached filename# 重命名
git mv filename1 filename2

三、远程仓库

3.1 免登录设置

Windows下生成ssh-keygen

1.安装Git
2.打开Git Bash
3.输入 ssh-keygen -t rsa -C "your email"

Linux下生成ssh-key

ssh-keygen -t rsa -C "your email"
cat ~/.ssh/id_rsa.pub
# ~/.ssh/id_rsa  这是私钥
# ~/.ssh/id_rea.pub  这是公钥# 验证
ssh -T git@git.oschina.net

3.2 远程库命令

关联远程仓库

# 把本地仓库与远程仓库相关联
git remote add origin git@github.com:yysue/learngit.git
# yysue:github账户名或gitee账户名
# origin:远程库的名字,这是Git默认的叫法# 关联分支
git branch --set-upstream-to=origin/master master
# 将本地的master分支与远程origin库的master分支关联# pull,第一次pull加--allow-unrelated-histories
# https://stackoverflow.com/questions/37937984/git-refusing-to-merge-unrelated-histories-on-rebase
git pull --allow-unrelated-histories

直接修改配置

# 当前版本库目录下
$ cat .git/config
[core]repositoryformatversion = 0filemode = falsebare = falselogallrefupdates = truesymlinks = falseignorecase = true
[remote "origin"]url = git@git.oschina.net:yysue/mysqldba.gitfetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]remote = originmerge = refs/heads/master

查看远程库

git remote -v

推送到远程库

git push -u origin master
# 把本地所有内容推送到远程库上
# -u参数,不但会把本地master分支推送到远程master分支,还会把本地master分支与远程master分支相关联
# 第一次推送用-u,以后用就可以不用了
git push origin master

从远程库抓取

git pull origin master

从远程库克隆

git clone git@github.com:h2o1k/gitskills.git        ssh协议,速度快
git clone https://github.com/h2o1k/gitskills.git    https协议

远程仓库强制覆盖本地文件

git fetch --all  
git reset --hard origin/master 
git pull

四、分支管理

4.1 branch/checkout/merge

查看master分支

master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点

创建并切换到dev分支

# 查看当前分支的命令
git branchgit checkout -b dev
# -b 表示创建并切换,与下面两条命令等价
git branch dev
git checkout dev# 再查看一下分支
git branch

在dev分支提交

vi dev.txt
Creating a new branch is quick.git add dev.txt
git commit -m "add dev.txt"

切换到master分支

git checkout master

dev合并到master

git merge dev -m "merge dev"
# merge合并指定分支到当前分支,
# so,必须在master分支下执行上述命令

保留分支信息的合并

git merge --no-ff -m "merge" dev
# --no-ff会保留分支信息

通常,分支合并时,Git会用Fast forward模式,这种模式下,删除分支后,会丢失分支信息,禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息

删除dev分支

git branch -d dev

产生冲突

master分支和feature1都有新的提交

解决冲突

编辑冲突文件,然后再添加、提交、合并,最后删除分支feature1

查看日志

分支管理策略

4.2 stash

我们有时会遇到这样的情况,正在分支a上开发一半,然后分支b上发现Bug,需要马上处理。

这时候分支a上的修改怎么办呢,git add 是不行的,有的git客户端版本会提示还有add过的文件没提交不能切换分支,有的git客户端版本会把修改带到b分支。

git stash 就是解决这个问题,它把当前工作区的修改和git add的内容都保存到一个地方,然后git reset HEAD,使工作区回到上一次提交,处于干净状态。然后就可以很放心的切到另外的分支b干活了。

git stash save “先给我保存一下,我要去别的分支修bug”
git stash list
# 切换到其他分支去修改bug
# ...
# 再切换到打stash的分支
git stash pop
# git stash pop相当于执行git stash apply和git stash drop
git stash apply stash@{num}

4.3 rebase

有的时候我们在一个分支a开发的时候,master已经进入了很多修改,这时候如果把a的修改提交上去,可能就会跟主干有冲突,需要在主干解决冲突才能提交,这样比较难看。

这时候git rebase就有用了,git rebase BRANCH_NAME可以把BRANCH_NAME分支的修改带到当前分支来,这样当前分支就有了BRANCH_NAME分支的所有内容,这样在当前分支开发的内容提交以后不会跟BRANCH_NAME有冲突,冲突在当前分支就可以解决。

4.4 小技巧

可以取消已经提交的commit,一般我们只用git reset HEAD^。因为每个分支可能开发过程中为了保存过程以便回溯会有很多commit,但是我们要求进入主干时,每个功能和bugfix只能有一个提交,因此可以先用git reset退回到最早的commit,然后把自己的修改最后打包成一个commit,再去跟主干合并。

利用这两个命令,我们可以很好的管理我们的MySQL开发。我们只有一个master分支作为主干,不允许在主干上直接开发。每个同学根据feature和bug的issue建立分支,然后在分支上开发,不管开发过程中有多少个commit,我们要求最终提交每个bugfix或feature只能有一个提交。因此每个同学完成开发后,都需要git reset 退到最早的commit,git stash save宝存一下自己的修改,然后git checkout master; git pull拖一下最新的主干,然后返回自己的分支,再做git rebase master,把当前分支推进到主干,最后git stash pop弹出修改,有冲突则在当前分支解决,再git push。

# 此时commit id为a37b9ff,切换到开发版本dev
git checkout -b dev
# 实现了一个功能xxx,期间多次commit
...
# xxx开发完毕后,合并到主分支要求只有一个commit
git reset a37b9ff
git stash save "保存开发功能xxx的修改"
git checkout master
git pull
git checkout dev
git rebase master
git stash pop
# 处理冲突
git add .
git commit -m "功能xxx"
git checkout master
git merge --no-ff -m "merge 功能xxx" dev

4.5 常用分支命令

# 查看当前分支
git branch   
# 创建分支dev
git branch dev  
# 切换到分支dev
git checkout dev 
# 创建并切换到分支dev
git checkout -b dev 
# 合并指定分支(dev)到当前分支
git merge dev 
# 删除分支dev, 如果分支有未提交的这样删除不了
git branch -d dev
# 强制删除
git branch -D dev 
# 查看分支合并情况
git log --pretty=oneline --graph --abbrev-commit
# master转gh-pages
# 创建一个没有父节点的分支gh-pages
git checkout --orphan gh-pages

五、标签管理

5.1 常用标签命令

# 切换到要打标签的分支上
git branch
git checkout master# 打标签
git tag v1.0# 默认标签是打在最新提交的commit上,也可以指定commit id
# git log --pretty=oneline --abbrev-commit
git tag v0.9 <commit id># 查看标签列表
git tag# 查看某标签信息
git show v0.9# 标签加注释
git tag -a v0.1 -m "version 0.1 released" 2428164# 可以用PGP签名标签
git tag -s v0.2 -m "signed version 0.2 released" fac145a# 删除标签
git tag -d v0.1# 把标签推送到服务器
git push origin v1.0# 一次性推送全部尚未推送的本地标签
git push origin --tags# 删除远程库标签
# 先删除本地标签
git tag -d v0.9
# 再删除远程库标签
git push origin :refs/tags/v0.9

六、使用GitHub

6.1 Fork/克隆

七、自定义Git

# 如果一个jar文件已经加到忽略文件里边了
# 想把一个jar文件添加到版本库
git add -f aaa.jar

八、问题

8.1 注释输入不了中文了

# Git安装目录 D:\Program Files\Git
# 编辑如下文件D:\Program Files\Git\etc\inputrc
# 确保如下行的配置如下,就可以保证输入中文注释了
set output-meta on
set convert-meta off

九、参考

  • Git教程-廖雪峰
  • 一些Git操作的技巧

转载于:https://my.oschina.net/yysue/blog/1635600

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4-3逻辑非运算符及案例 4-4

创建类 LoginDemo3 这里取反 !(n%30) package com.imooc.operator; import java.util.Scanner;public class LoginDemo3 {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("请输入一个整数");Scanner scnew Scanner(…

assistant字体_如何使用Google Assistant设置和致电家庭联系人

assistant字体Google谷歌Google Home and Nest smart speakers and displays allow you to make calls without using your phone. By setting up “Household Contacts,” anyone in your home can easily call friends and family members with Google Assistant-enabled dev…

Accoridion折叠面板

详细操作见代码&#xff1a; <!doctype html> <html><head><meta charset"UTF-8"><title></title><meta name"viewport" content"widthdevice-width,initial-scale1,minimum-scale1,maximum-scale1,user-scal…

skype快捷键_每个Skype键盘快捷键及其用法

skype快捷键Roberto Ricca/Shutterstock罗伯托里卡/ ShutterstockGet familiar with Skype’s unique keyboard shortcuts that will allow you to quickly change your settings, alter your interface, and control your communications. Use these hotkeys and become a Sky…

YouTube键盘快捷键:速查表

Google’s video website wouldn’t be complete without all sorts of useful buttons and hidden commands that aren’t immediately obvious. Use this hotkey cheat sheet to quickly navigate YouTube and gain better control over your video browsing experience. 如果…

MySQL服务读取参数文件my.cnf的规律研究探索

在MySQL中&#xff0c;它是按什么顺序或规律去读取my.cnf配置文件的呢&#xff1f;其实只要你花一点功夫&#xff0c;实验测试一下就能弄清楚&#xff0c;下面的实验环境为5.7.21 MySQL Community Server。其它版本如有不同&#xff0c;请以实际情况为准。 其实&#xff0c;MyS…

将组策略编辑器添加到控制面板

If you find yourself using the Group Policy Editor all the time, you might have wondered why it doesn’t show up in the Control Panel along with all the other tools. After many hours of registry hacking, I’ve come up with a registry tweak to let you do ju…

Exchange Server 2016管理系列课件50.DAG管理之激活数据库副本

激活邮箱数据库副本是将特定被动副本指定为邮箱数据库的新主动副本的过程。我们将此过程称为数据库切换。数据库切换过程是指卸除当前的活动数据库&#xff0c;然后在指定的服务器上将相应的数据库副本作为新的活动邮箱数据库副本进行装载。成为活动邮箱数据库的数据库副本必须…

常见设计模式 (python代码实现)

1.创建型模式 单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是一种常用的软件设计模式&#xff0c;该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中&#xff0c;某个类只能出现一个实例时&#xff0c;单例对象就能派上用场。 比如&#…

记录一次解决httpcline请求https报handshake_failure错误

概述 当使用httpclinet发起https请求时报如下错误&#xff1a; javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failureat com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)at com.sun.net.ssl.internal.ssl.Alerts.getSSLExcep…

桌面程序explorer_备份Internet Explorer 7搜索提供程序列表

桌面程序explorerIf you are both an IE user and a fan of using custom search providers in your search box, you might be interested to know how you can back up that list and/or restore it on another computer. Yes, this article is boring, but we’re trying to…

GreenPlum数据库故障恢复测试

本文介绍gpdb的master故障及恢复测试以及segment故障恢复测试。 环境介绍&#xff1a;Gpdb版本&#xff1a;5.5.0 二进制版本操作系统版本&#xff1a; centos linux 7.0Master segment: 192.168.1.225/24 hostname: mfsmasterStadnby segemnt: 192.168.1.227/24 hostname: ser…

书评:Just the Computer Essentials(Vista)

Normally we try and focus on articles about how to customize your computer, but today we’ll take a break from that and do a book review. This is something I’ve not done before, so any suggestions or questions will be welcomed in the comments. 通常&#x…

python学习

为了学会能学&#xff0c;不负时间&#xff0c;为了那简练的美&#xff01; 为了一片新天地。 /t 对齐 python : # 99乘法表i 0while i < 9 : i 1 j 0 while j < i : j 1 print(j ,* , i,"" , i*j , end\t) #空格不能对齐 制表符…

hey 安装_如何在助理扬声器上调整“ Hey Google”的灵敏度

hey 安装Vantage_DS/ShutterstockVantage_DS / ShutterstockThe Google Assistant is a useful tool that allows you to control your smart home, check the weather, and more. Unfortunately, the Assistant might not hear you in a noisy environment or it might activa…

EXCEL如何进行多条件的数据查找返回

在使用EXCEL时经常会碰到一个表里的同一款产品每天的销量都不一样&#xff0c;然后我们需要查导出每一款产品每天的销量&#xff0c;即一对多条件查找。这个教复杂&#xff0c;我们要用到好几个函数的综合&#xff0c;下面小编来教你吧。 工具/原料 EXCEL软件&#xff08;本文使…

如何将Google幻灯片转换为PowerPoint

If someone sent you a presentation on Google Slides, but you’d rather work on it in Microsoft PowerPoint, you can easily convert it to a .pptx file in just a few simple steps. Here’s how it’s done. 如果有人在Google幻灯片上向您发送了演示文稿&#xff0c;但…

XP调整禁用页面文件

NOTE: You shouldn’t disable your page file unless you really really know what you are doing. 注意&#xff1a;除非您真的很清楚自己在做什么&#xff0c;否则不应该禁用页面文件。 If your computer has 1 GB of RAM or more, disabling the page file can speed up XP…

如何在Windows 10的命令提示符中更改目录

One of the first things you’ll need to learn as you become more familiar with Command Prompt on Windows 10 is how to change directories in the operating system’s file system. There are a few ways you can do this, so we’ll walk you through them. 随着您对…

MySQL优化总结

2019独角兽企业重金招聘Python工程师标准>>> 从这几天看MySQL性能优化来看&#xff0c;基本的思路就是分分分&#xff0e;&#xff0e;&#xff0e; 1&#xff0c;分读&#xff0c;用缓存来分摊读表的压力; 2&#xff0c;读写分离&#xff0c;主从分离&#xff0c;写…