0 引言

git/github是当前最好的代码版本管理和协同工作工具。最近我终于用上了这一先进工具,撒花撒花!

  1. # 先把大神廖雪峰的链接献上
    https://www.liaoxuefeng.com/wiki/896043488029600
    # 官方教程
    https://git-scm.com/

1 配置git使用环境

git的使用环境主要包括git的安装、设置SSH公钥和私钥、添加到github账号、测试连接,参考了如下链接。

  1. http://bitjoy.net/2018/11/13/ubuntu%E4%B8%8B%E4%BD%BF%E7%94%A8vscode%E8%BF%9E%E6%8E%A5github/

一步一步来就行了,非常简单。

  1. # 设置并确认 username in git
  2. $ git config --global user.name "Mona Lisa"
  3. $ git config --global user.name
  4. > Mona Lisa
  5.  
  6. # 设置并确认commit email address in Git
  7. $ git config --global user.email "email@example.com"
  8. $ git config --global user.email
  9. > email@example.com

  10. # 查看git 配置
    $ git config --list --show-origin # 可以看到文件存放位置,user.name, user.email等信息
  11.  
  12. # 生成一个新的SSH key并添加到 ssh-agent中
  13. $ ssh-keygen -t rsa -b -C "your_email@example.com"
  14. # 接下来跟着操作就行,需要设置路径、输入 passphrase等
  15.  
  16. # 查看本机公钥
    a. 打开你的 git bash 窗口
    b. 进入 .ssh 目录:cd ~/.ssh
    c. 找到 id_rsa.pub 文件:ls
    d. 查看公钥:cat id_rsa.pub 或者 vim id_rsa.pub
  1. # 将SSH key添加到ssh-agent中
  2. $ eval "$(ssh-agent -s)"
  3. $ ssh-add ~/.ssh/id_rsa
  4.  
  5. # 测试链接是否成功
  6. $ ssh -T git@github.com

2 git关联和推送到远程仓库

(1)将git本地项目提交到远程仓库

  1. # 进入项目文件夹,通过命令git init将项目初始化成git本地仓库
  2. $ git init
  3.  
  4. # 将项目内所有文件都添加到暂存区
  5. $ git add .
  6.  
  7. # 对本次的提交进行备注,以便后期版本回退等操作
  8. $ git commit -m 'xxx' //xxx是本次提交备注的内容
  9.  
  10. # 在github上新建一个仓库,复制仓库地址,然后使用命令将本地仓库与远程仓库建立连接
  11. $ git remote add origin xxx //xxx是git仓库的地址
  12.  
  13. # 将暂存区的文件推送至远程仓库(使用强制推送'-f'是因为一般新建仓库的时候会生成read me文件,导致需要先git fetch才能推送,但这个read me文件其实是不需要的,因为在生成本地项目的时候一般也会生成一个read me文件,所以选择直接强制推送过去。)
  14. $ git push origin master -f # 不用-f比较好,因为正常的流程是要在自己的本地解决掉所有的 merge conflict 之后才能 push 到 remote 的。鲁莽的 push -f 确实很容易激怒别人,同时也会很大风险把别人有价值的 commit 都覆盖清空了

(2)下载远程仓库到本地

  1. $ git clone git@github.com:2017Greg/geometry-processing-registration.git

3  初始化、提交、回退操作

(0)初始化本地仓库

  1. # 建立本地仓库与远程仓库之间的连接关系
    $ git init
  2. $ git remote add origin https://gitee.com/用户个性地址/HelloGitee.git

(1)将远程仓库pull到本地仓库

  1. # 将远程仓库下载下来
    $ git clone https://gitee.com/用户个性地址/HelloGitee.git #将远程仓库克隆到本地

(2)将本地仓库push到远程仓库

  1. $ git add . #将当前目录所有文件添加到git暂存区
  2. $ git commit -m "my first commit" #提交并备注提交信息
  3. $ git push origin master #将本地提交推送到远程仓库

(3)github的版本回退与逆回退功能

  1. # git中用 HEAD表示当前版本,也就是最新的提交;
  2. # 上一个版本是HEAD^,上上一个版本是HEAD^^
  3. # 上100个版本是 HEAD~
  4.  
  5. # 回退到上一个版本
  6. git reset --hard HEAD^
  7.  
  8. # 回退到指定版本
  9. git reset --hard 1094a*** ## hard后边是版本号,不需要写完全
  10.  
  11. # 逆回退操作
  12. git reflog
  13.  
  14. e475afc HEAD@{}: reset: moving to HEAD^
  15. 1094adb (HEAD -> master) HEAD@{}: commit: append GPL
  16. e475afc HEAD@{}: commit: add distributed
  17. eaadf4e HEAD@{}: commit (initial): wrote a readme file
  18.  
  19. git reset --hard 1084adb #回退到了指定的版本

4 过滤/跟踪某些文件的操作: .gitignore

(1).gitignore文件的创建

  1. // .gitignore 的创建
  2. // 进入git bash, 进入项目所在目录
  3.  
  4. $ touch .gitignore // 创建一个.gitignore文件 接下来对该文件进行编辑

(2)编辑.gitignore设置过滤/跟踪件,执行的顺序有先后,以最后一次执行判断是过滤还是跟踪

  1. # 表示过滤这个文件夹
  2. /mtk/
  3.  
  4. # 表示 过滤这种类型的文件
  5. *.zip
  6. *.rar
  7. *.exe
  8. *.txt
  9. *.dll
  10.  
  11. # 指定过滤某个文件
  12. /mtk/do.c
  13. /mtk/if.h
  14.  
  15. # 设置跟踪某个文件夹
  16. !/plutommi/mmi
  17.  
  18. # 设置跟踪某类文件
  19. !*.c
  20. !*.h
  21.  
  22. #跟踪某个指定的文件
  23. !/plutommi/mmi/mmi_features.h

(3).gitignore失效的解决方案

  1. 问题:在使用git进行版本控制,执行一下命令时
  2. $ git add .
  3. $ git commit --m "test"
  4. $ git status
  5. $ git push origin master
  6. 发现想被忽略提交的文件仍在会被提交,也就是说实际并没有被忽略
  7.  
  8. 原因:git ignore 只会对不在git远程仓库中的文件进行忽略,如果这些文件已经在git仓库中了,则不会忽略。所以如果需要忽略的文件已经提交到远程仓库了,则需要从从远程仓库中删除,.gitignore才能实际生效。
  9.  
  10. $ git push/git clone将远程仓库的代码同步到本地
  11. $ git rm file/to/be/ignored -r
  12. $ 修改.gitignore中的内容
  13. $ git add . + git commit + git push

5 Git多人协作

(1)基本模式:

  1. 管理员创建一个项目,放在github或者gitee
  2. git clone ssh 下载到本地
  3. 修改,git add . -> git commit -m "first commit" -> git push origin master
    # 其它人加入到项目中称为管理员
    4 git clone ssh_address
    5 git pull origin master
    6 修改
    7 git add . -> git commit -m "first commit" -> git push origin master

(2)git中https 和 ssh的区别

  1. # clone项目时
  2. 使用ssh方式时,需要配置个人的ssh key, 并将生成的ssh公钥配置到git服务器中。而对于https方式来讲,就没有这些要求。
  3.  
  4. # push到远程服务器时
  5. 使用ssh方式时,是不需要验证用户名和密码的,如果你在配置ssh key时设置了密码,则需要验证密码。而对于使用https方式来讲,每次push都需要验证用户名和密码。

6 git log查看提交历史

  1. # 将每个提交放在一行显示
    $git log --pretty=oneline
    # 退出git log或者vim编辑器
    $ Q

7 git branch 分支操作

(1)分支策略:盗用廖雪峰的一张图解释一下

master是稳定版本,也就是仅用来发布新版本,平时不能在上面干活。干活的时候都在dev分支上,也就是说dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本。 而每个人平时都在自己的dev分支上干活,时不时往dev分支上合并就可以了。

(2)常见操作

  1. https://www.cnblogs.com/chechen/p/9950798.html
  2.  
  3. # 第一个操作:我在远程建了一个分支,想pull到本地,此时本地没有同名分支
    1)远程建立分支:手动搞,名为 dev
    2)查看远程分支:
    $ git branch -a # 加上-a可以查看远程分支,远程分支会用红色表示出来
    3)将远程分支拉取到本地
    $ git checkout --track origin/dev
    4 可能会报错,报错信息如下:
    fatal: 'origin/hotfix_20180820' is not a commit and a branch 'hotfix_20180820' cannot be created from it
    解决方案:
    $ git pull # 重新拉取数据
    $ git checkout --track origin/dev
  4.  
  5. # 第二个操作:我将本地分支推送到远端,并跟master合并
    1)确定当前分支
    $ git branch
    2)切换本地分支
    $ git checkout dev
    3)推送到远端仓库 有三种情况 https://blog.csdn.net/torpidcat/article/details/81252505
    3.1)远程已有remote_branch分支并且已经关联本地分支local_branch且本地已经切换到local_branch
    $ git push
    3.2)远程已有remote_branch分支但未关联本地分支local_branch且本地已经切换到local_branch
    $ git push -u origin/dev
    3.3)远程没有remote_branch分支并,本地已经切换到local_branch
    $ git push origin dev:origin/dev
  6.  
  7. # 第三个操作:我在本地建立了一个分支,并推动到远端
    1)创建本地分支
    $ git checkout -b dev
    2)查看本地分支的状态
    $ git branch
    3)将本地分支推送到远端
    $ git push origin dev:dev
    如果不行的话,尝试
    $ git push --set-upstream origin dev
    可以在自动在远程创建一个 dev分支,然后本地分支会track该分支。
    4)查看远程分支
    $ git branch -a
    5)删除远程分支
    $ git push origin :dev
    $ git push origin -d dev
  8.  
  9. # 第四个操作:合并远程分支
    1)把代码clone到本地仓库
    $ git clone https://gitee.com/zhanghan_123/gittest.git
    2)在本地创建dev分支并与远程dev分支对应
    $ git checkout -b dev origin/dev
    3)切换到master分支
    $ git checkout master
    4)本地的dev合并到master上(如果遇到冲突解决完后再次提交即可)
    $ git merge dev
    5)推送到远程的master
    $ git push origin master

8 回滚操作

(1)commit的回滚

  1. # 首先查看最近的commit
  2. $ git log
  3.  
  4. # 然后回滚,回滚到指定的commit 用软回滚不影响目录下的文件
  5. $ git reset --soft %目标的SHA1值%
  6.  
  7. # 回滚n次
  8. $ git reset HEAD^ # ( 回滚几次加几个 '^')

9 git tag-打标签

  1. # tag的用法:保存多个版本的文件,每个版本都用一个tag来标识,方便找到
  2. git add .
  3. git commit -m "v1"
  4. git tag v1
  5. git push origin v1 / git push v1

48 git使用的更多相关文章

  1. Windows系统下搭建Git本地代码库

    近由于工作需要,要把工作代码做一下版本管理.工作代码也不方便放到github上,也不想付费建私密库,公司也没几个人,所以就想着搭建一个本地Git版本库,来做版本管理.搭建过程如下. 系统环境:Dell ...

  2. Git常用命令及使用,GitLab/GitHub初探,Git/Svn区别

    Git安装配置及常用命令 0 Git本地分支管理 1 Git远程分支管理 2 Git Tag标签管理 3 Git Log日志 4 其它高级命令 5 常规使用及介绍 6 角色权限 7 分支定义 8 一般 ...

  3. git 那些事儿 —— 基于 Learn Git Branching

    前言 推荐一个 git 图形化教学网站:Learn Git Branching,这个网站有一个沙盒可以直接在上面模拟 git 的各种操作,操作效果使用图形的方式展示,非常直观.本文可以看作是它的文字版 ...

  4. 分布式版本控制系统Git的使用;

    1.什么是Git Git是一个分布式的版本控制软件: 软件,类似于qq.office等安装到电脑才能使用的工具. 版本控制,类似于毕业论文,视频剪辑等需要反复修改和保留原历史数据: 分布式 文件夹拷贝 ...

  5. linux perf - 性能测试和优化工具

    Perf简介 Perf是Linux kernel自带的系统性能优化工具.虽然它的版本还只是0.0.2,Perf已经显现出它强大的实力,足以与目前Linux流行的OProfile相媲美了. Perf 的 ...

  6. 20162307 实验四 Android程序设计

    实验四 <Android程序设计> 北京电子科技学院(BESTI) 实 验 报 告 课程:程序设计与数据结构 班级:1623 姓名:张韵琪 学号:20162307 指导教师:娄佳鹏老师.王 ...

  7. 下载tree命令的源代码 - The Tree Command for Linux Homepage

    The Tree Command for Linux Homepage http://mama.indstate.edu/users/ice/tree/ [root@test ~]# ll -as m ...

  8. leetcode练习之No.7------ 翻转整数reverse_integer

    原文地址:http://www.niu12.com/article/48 git地址:git@github.com:ZQCard/leetcode.git 给定一个 32 位有符号整数,将整数中的数字 ...

  9. centos使用--防火墙

    目录 1 切换到zsh 1.1 查看系统当前的shell 1.2 查看bin下是否有zsh包 1.3 安装zsh包 1.4 切换shell至zsh 2 安装oh-my-zsh 2.1 oh-my-zs ...

随机推荐

  1. eclipse发布路径变更

    但是其默认访问的目录是eclipse临时目录而非Tomcat目录, 建议双击tomcat進入配制界面Service Locations 修改选项为:Use Tomcat installation(ta ...

  2. python 获取淘宝商品信息

    python cookie 获取淘宝商品信息 # //get_goods_from_taobao import requests import re import xlsxwriter cok='' ...

  3. CodeFirst命令

    CodeFirst get-help entityFramework          NuGet命令 Add-Migration                     Adds a new mig ...

  4. c++之初始化列表

    #include<iostream> using namespace std; class Person{ public: int m_a; int m_b; int m_c; Perso ...

  5. Robot Framework:日志输出中文Unicode编码

    robotframework 输出日志时,中文显示为Unicode编码 . 修改方法: 在Python27\Lib\site-packages\robotframework-3.0.4-py2.7.e ...

  6. move_base 分层代价地图的作用(翻译)

    A. 标准层 ​ Static Map Layer:为了做全局规划,机器人需要一个超越其传感器的地图,以了解墙壁和其他静态障碍物的位置. 静态地图可以先用SLAM算法生成,也可以从架构图中创建. 当层 ...

  7. delphi dll调用问题

    dll传递string实现方法 delphi中dll传递string的实现方法: dll项目uses第一个引用sharemem单元; 调用的项目uses第一个引用sharemem单元; 调用的单元us ...

  8. C语言新手写扫雷攻略4

    今天写的是游戏过程的函数,基本的算法前面都解释过了,今天是实现基本的功能 补充一下前面需要用到的头文件 #include<conio.h> //_kbhit() #include<s ...

  9. CSS:CSS 伪元素

    ylbtech-CSS:CSS 伪元素 1.返回顶部 1. CSS 伪元素 CSS伪元素是用来添加一些选择器的特殊效果. 语法 伪元素的语法: selector:pseudo-element {pro ...

  10. 海外版本Google登录

    海外版本: 1.安裝谷歌安裝器:手机浏览器搜索“谷歌安装器”,安装酷安的好一些,地址: https://www.coolapk.com/apk/com.goplaycn.googleinstall 2 ...