Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 的读音为 / gɪt/。

GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 git 作为唯一的版本库格式进行托管,故名 GitHub。

一:Git 基本操作

配置

Windows 下配置文件位置:C:\Users\Administrator\.gitconfig

  • 姓名:git config --global user.name "Your Name"

  • 邮箱:git config --global user.email "email@example.com"

  • 支持 UTF-8 编码(中文字符由显示转义字符调整为显示正常字符):git config --global core.quotepath false

    Git Bash 可能还需要:Git Bash 窗口右键 ->Options->Text->Locale 设置 zh_CN,Character set 设置 UTF-8

  • Git GUI 支持 UTF-8 编码:git config --global gui.encoding utf-8

  • 忽略文件权限:git config core.filemode false

  • 检查文件名大小写:git config core.ignorecase false

  • 查看配置:cat .git/config

版本(commit)

查看历史记录

  • 标准:git log
  • 一行:git log --pretty=oneline
  • 包括未来版本:git log --reflog
  • 按提交顺序逆序:git log --reverse--reverse : Git - git-log Documentation
  • 查看全部信息(committer):git log --format=fuller

版本回退

  • 回退一个版本:git reset HEAD^
  • 回退两个版本:git reset HEAD^^
  • 回退 N 个版本:git reset HEAD~N
  • 回退到指定版本:git reset 版本号

版本前进

  1. 通过查看历史命令查看未来版本号(git log 命令获取不到未来版本号):git reflog

    或通过以下命令查看未来版本号:git log --reflog

  2. 跳转到指定版本:git reset 版本号

查看某个版本的改动[一行]

Git - git-show Documentation

git show 版本号 [--stat]

分支(branch)

创建

  • 创建:git branch dev
  • 创建并切换:git checkout -b dev

切换

  • git checkout dev

查看

  • git branch

合并

  • 合并指定分支到当前分支:git merge dev

删除

  • 删除本地分支:git branch -d dev

从远程库删除

  • git push --delete origin devel

修剪分支(变鸡):rebase

https://git-scm.com/docs/git-rebase

标签(tag)

查看

  • 列出所有 tag(按字母排序):git tag
  • 列出 1. 几的版本 tag:git tag -l v1.*

创建

  • 不带信息的 tag:git tag v1.0
  • 带信息的 tag:git tag -a v1.0 -m 'first version'
  • 为以前的 commit 添加 tag:git tag -a v1.0 版本号

删除

  • git tag -d v1.0

上传到远程库

  • push 单个 tag:git push origin [tagname]
  • push 所有 tag:git push [origin] --tags

从远程库删除

  • git push origin :refs/tags/tagnamegit push origin :tagname

撤销修改

暂存区 -> 工作区:git checkout filename

版本库 -> 暂存区:git reset HEAD filename

查看历史命令

git reflog

换行(eol)

core.autocrlf:配置 eol 自动转换

  • true(默认):提交时将 CRLF 变为 LF,window 下迁出时将 LF 变为 CRLF
  • input:提交时将 CRLF 变为 LF
  • false:不变

core.eol:配置 eol,当core.autocrlftrueinput时该配置失效

  • lf, crlf 或_native_

二:Git 远程仓库

1. 创建 SSH Key

$ ssh-keygen -t rsa -C "youremail@example.com"

2. GitHub 配置 SSH Key

  1. 登录 GitHub->Account settings->SSH Keys
  2. Title
  3. key 中粘贴 id_rsa.pub 文件的内容

3. GitHub 创建仓库

登录 GitHub 创建仓库

4. 本地仓库 push 到 GitHub

  1. 关联远程库:git remote add origin git@github.com:path/repo-name.git
  2. 推送[第一次 push]:git push [-u] [origin master]
  3. 推送到分支:git push origin local_branch:remote_branch

5. GitHub pull 到本地仓库

GitHub 上为最新版本,本仓库是旧版本可以用 pull 将本地更新到最新版本

git pull [origin remote_branch:local_branch]

pull = fetch(下载) + merge(合并)

6. GitHub clone 到本地

git clone git@github.com:path/repo-name.git

  • clone 最近 N 次提交:git clone --depth 1 git@github.com:path/repo-name.git
  • fetch 指定提交:
    git fetch git@github.com:path/repo-name.git <sha1-of-commit-of-interest>
    git reset --hard FETCH_HEAD
  • 使用用户名和密码克隆私有仓库
    git clone https://username:password@github.com/username/repository.git
    git clone https://username@github.com/username/repository.git

7. 配置远程仓库

  • git remote 不带参数:列出已经存在的远程分支
  • git remote -v | --verbose:列出详细信息,在每一个名字后面列出其远程 url
  • git remote add [shortname] [url]:添加一个新的远程仓库, 可以指定一个简单的名字, 以便将来引用
  • git remote remove name:删除远程仓库

8. 版本回退

方案 1(推荐):

$ git revert <commit>
$ git push origin master

方案 2(不推荐!!!):

$ git reset --hard <commit>
$ git push origin master -f

方案 3(不推荐!!!):

$ git reset --hard <commit>
$ # 删掉远程仓库的分支
$ git push <remote_name> :<branch_name>
$ git push <branch_name> <branch_name>

9. GitHub Pull Request

  1. Fork 官方的仓库
  2. clone 下来刚刚 Fork 的仓库
  3. 创建分支
  4. 修改代码
  5. 提交修改
  6. push 修改到刚刚 Fork 的仓库
  7. 在 GitHub 官方仓库上点击 Pull Request->New pull request
  8. 注意 Compare changes 下面有一行小字有个链接 compare across forks,点击这个链接就能选择这个项目的 Fork 里的分支了进行比较了
  9. 比较后觉得没问题了,点击 Create pull request 输入修改了什么就 OK 了

10. 保存用户名密码

这种方式可以在无法用 SSH Key 的场合使用

git config --global credential.helper store
git pull

credentials - How to save username and password in GIT? - Stack Overflow

三:高级操作

寻找丢失的版本

git fsck --lost-found

eg:A 更新到 B,B 回退到 A,A 又更新到 C。丢失的 B 用上面的命令找回。(版本回退后在旧版本提交产生的问题)

清除 untracked 的文件

谨慎使用可以先加上-n检查一下哪些文件将被删除。

git clean [-d] [-f] [-x] [-n]

  • -d:包括文件夹
  • -f:强制执行
  • -x:删除忽略的文件
  • -n:不删除文件,只列出哪些文件将被删除

修改多个提交的提交信息

version control - How to change the author and committer name and e-mail of multiple commits in Git? - Stack Overflow

#!/bin/sh

git filter-branch --env-filter '
OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

四:.gitignore

语法:

  1. 以斜杠 "/" 开头表示根目录
  2. 以斜杠 "/" 结尾表示匹配的最后一项是目录
  3. 以星号 "*" 通配多个字符(全部文件)
  4. 以问号 "?" 通配单个字符
  5. 以叹号 "!" 表示不忽略(跟踪)匹配到的文件或目录

eg:忽略根目录下 upload 文件夹,除了 2015 文件夹

#最前面不加"/"则所有文件夹下的upload都会忽略
#不加"*"则将upload忽略而不是upload下的文件忽略,后面的!/upload/2015/无法生效
/upload/* #忽略/upload/2015/文件夹
!/upload/2015/

eg:忽略 / web/upload / 下的所有文件和文件夹,除了 / web/upload/img/20170301 / 文件夹

/web/upload/*

!/web/upload/img/
!/web/upload/img/20170301/

五:多账户配置

配置 user 和 email

  • 全局配置(~/.gitconfig)

    姓名:git config --global user.name "Your Name"

    邮箱:git config --global user.email"email@example.com"

    ssh-keygen -t rsa -C "youremail@example.com"

    Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): /c/Users/Administrator/.ssh/name_rsa

  • 单个仓库配置(仓库 /.git/config)

    进入某仓库

    姓名:git config user.name "Your Name"

    邮箱:git config user.email"email@example.com"

    ssh-keygen -t rsa -C "youremail@example.com"

    Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): /c/Users/Administrator/.ssh/name_rsa

配置使用的 key

这里使用哪个用户上传就把哪个用户放上面(不知道为什么只能用第一个)

  1. 进入~/.ssh
  2. 创建 config 文件
  3. 配置每一个 key
#global_key
Host github.com
​ HostName github.com
​ IdentityFile ~/.ssh/name_rsa1
​ PreferredAuthentications publickey
​ User your_name1 #xxx_key
Host github.com
​ HostName github.com
​ IdentityFile ~/.ssh/name_rsa2
​ PreferredAuthentications publickey
​ User your_name2 # 配置文件参数 # Host : Host 可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和 ssh 文件 # HostName : 要登录主机的主机名 # User : 登录名 # IdentityFile : 指明上面 User 对应的 identityFile 路径

六:在 U 盘中建立 git 仓库

  • 建立:

    在 U 盘作为仓库的目录(eg:I:\repo\test_project)执行git --bare init --shared

    bare:只有. git 中的文件,且. git 中的文件都放在当前目录下(git 服务器)

  • 使用:

    直接使用建立时的路径访问就行

    eg:git clone I:\repo\test_project

QQ空间分享网址的更多相关文章

  1. QQ空间分享功能(二)

    http://sns.z.qq.com/tools/share/demo_html.jsp  手机QQ空间分享功能接入指引: 1.请求地址: http://sns.z.qq.com/share 2.请 ...

  2. JavaScript实现HTML页面集成QQ空间分享功能

    <!DOCTYPE HTML> <html> <head> <title>QQ空间分享</title> <meta http-equi ...

  3. Android中集成QQ登陆和QQ好友分享及QQ空间分享

    extends : http://blog.csdn.net/arjinmc/article/details/38439957 相关官方文档及下载地址: 如果只用分享和登陆,用lite包就可以,体积小 ...

  4. QQ登入(3)QQ空间分享-无需登入

    public void myclick2(View v){ //QZone分享, SHARE_TO_QQ_TYPE_DEFAULT 图文,SHARE_TO_QQ_TYPE_IMAGE 纯图 ,SHAR ...

  5. 整合 新浪 腾讯 人人 qq空间 分享地址

    function snsShare(snsId, title, content, image, url) { var snsUrl; // 新浪 腾讯 要申请appkey switch (snsId) ...

  6. QQ分享 QQ空间分享 API链接:

    QZone: "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url={{URL}}&title={{TITL ...

  7. 自己动手写js分享插件 [支持https] (可以分享QQ空间,微信,新浪微博。。。)

    由于百度分享,jiathis 等分享插件在https下均会报错,就萌生了自己动手写一个分享插件的念头,其实实现起来一点都不难,以下代码都已在https网站运行通过,特附上以下代码:还请各位看官不吝赐教 ...

  8. Android项目实战(十七):QQ空间实现(二)—— 分享功能 / 弹出PopupWindow

    这是一张QQ空间说说详情的截图. 分析: .点击右上角三个点的图标,在界面底部弹出一个区域,这个区域有一些按钮提供给我们操作 .当该区域出现的时候,详情界面便灰了,也说成透明度变化了 .当任意选了一个 ...

  9. 分享到QQ空间、新浪微博、腾讯微博的代码

    今天公司原来的分享代码,在IE下有问题.网上找了下网上的分享代码. 给网页加上分享代码,借助网友的力量推广网站,目前已经很流行了 以下是网页代码 QQ空间分享代码如下: <a href=&quo ...

随机推荐

  1. Java{0}占位符替换字符串

    Java{0}占位符替换字符串 public class Test { public static void main(String[] args) { System.out.println(Stri ...

  2. oracle--权限的传递

    sys 用户 普通授权lisi grant alter any table to lisi; 将权限指定admin ,可以权限传递给其他用户 grant alter any table to lisi ...

  3. 2019寒假作业一:PTA7-1 打印沙漏

    - 打印沙漏 ( 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号: ...

  4. MySQL基础和习题强化(完结)

    Mysql 1.     Mysql基础知识 1.1.     Index and table searching of Mysql 1.1.1.     Basic concepts of Mysq ...

  5. Djaon 基于 Ajax 的 json 数据传输

    关键参数:contentType:"application/json" data:JSON.stringify({ json数据 }) 再views.py中,使用request.d ...

  6. C# 反射实现动态加载程序集

    原文:https://blog.csdn.net/pengdayong77/article/details/47622235 在.Net 中,程序集(Assembly)中保存了元数据(MetaData ...

  7. js中的回调地狱 Callback to Hell

        本文重点:解决方式:1.promise  2. 拆解 function:将各步拆解为单个的 function  3. 通过 Generator 函数暂停执行的效果方式 4. 通过ES8的异步函 ...

  8. Groovy基本语法

    官方文档 注释(Comments) 和Java一样,支持单行(使用//).多行(/* */)和文档注释(使用/** */). Shebang line UNIX系统支持一种特殊的单行注释叫作Sheba ...

  9. FCKeditor用在JSP中的几点注意事项

    转自:https://blog.csdn.net/asinzy/article/details/3854127 本篇文章主要介绍了"FCKeditor用在JSP中的几点注意事项", ...

  10. java 中的引用类型

    GC基本原理 GC (Garbage Collection)的基本原理:将内存中不再被使用的对象进行回收,GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征 ...