文章目录

  • 一、参考教程汇总
  • 二、Git详细教程
    • 2.1 工作区/暂存区/版本库的概念
    • 2.2 Git创建仓库的两种方式
    • 2.3 Git删除仓库
    • 2.4 SSH Key的配置方法
  • 三、常用命令
    • 3.1 常用命令汇总
    • 3.2 Git分支管理
      • 3.2.1 创建/切换/删除/合并命令
      • 3.2.2 分支管理
      • 3.2.3 Rebase
    • 3.3 Git撤销修改
    • 3.4 Git删除文件
      • 3.4.1 git clean
      • 3.4.2 git rm
    • 3.5 Git版本回退
    • 3.6 Git标签管理
    • 3.7 git stash
    • 3.8 git add/git commit/git push区别
    • 3.9 git status和git log区别
  • 四、常见问题及解决方案
    • 4.1 本地和远程版本冲突
    • 4.2 本地分支和远程分支的链接关系没有创建

一、参考教程汇总

1.【重磅推荐】Git管理-廖雪峰
2.【重磅推荐】Git Bash使用详细教程(很详细,包括创建git,远程同步,回退版本,分支管理,解决冲突,隐藏现场修复bug等)
3.Git的使用–如何将本地项目上传到Github
4.git和github新手快速操作流程

二、Git详细教程

2.1 工作区/暂存区/版本库的概念

工作区(Working Directory):

  • 就是你在电脑里能看到的本地目录,

版本库(Repository):

  • 工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
  • Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

暂存区(Stage):

  • 把文件往Git版本库里添加的时候,是分两步执行的:
    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
  • 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
  • 你可以简单理解为,需要提交的文件修改通通放到暂存区(git add),然后,一次性提交暂存区的所有修改(git commit)。

2.2 Git创建仓库的两种方式

为了实现github版本控制,需要创建仓库,有两种方法:

【第一种】(比较麻烦)

  1. git init 初始化本地仓库
  2. 把需要上传的文档复制到该文件夹下,可以通过git status查看当前repo状态
  3. 把该目录下所有文件添加到缓存区(git add .
  4. 把缓存区的项目提交到版本库(git commit -m "first commit")(需要输入用户名密码)
  5. 在Github上新建一个仓库,复制链接。
  6. 关联Github上的仓库和本地仓库 (git remote add origin https://github.com/aaon22357/test.git
  7. 把本地库的所有内容推送到远程repo上(git push -u origin master
    避坑指南:
    如果创建远程仓库的时候创建了README文件,那么在push的时候会报错:failed to push some refs to https://github.com/aaon22357/test.git
    解决方法:git pull --rebase origin master,之后再push就好啦。

git pull --rebase——(是一种冲突解决方式)用在合并代码的时候其作用就是在一个随机创建的分支上处理冲突,避免了直接污染原来的分区,如果有冲突, 解决冲突

git add .
不需要commit
git rebase --continue
git push 到远端

【第二种】(简单,推荐)
第一种做法要在本地和远端分别新建repo,然后remote连接,可能还需要处理冲突,比较麻烦,第二种方法就很简单了!

  1. 在github上创建空repo
  2. git clone 远程repo地址到本地
  3. 在本地repo中修改项目文件
  4. 将最新项目文件添加到本地暂存区(git add .
  5. 将暂存区文件提交到版本库(git commit
  6. 将版本库的文件push到远端repo(git push -u origin master

以下是【第二种】方法的具体步骤和实现细节:

第一步:在远程gitbub上创建一个repo

第二步:clone远程仓库到本地(有HTTPS和SSH两种clone方式)
git clone https://github.com/aaon22357/test_repo.git
https://github.com/aaon22357/test_repo.git是上面新建好的远程仓库地址

第三步:在本地仓库中修改项目文件

git status:查看本地仓库和暂存区的状态
git diff :查看file文件修改了什么内容

第四步:将最新的项目文件添加到本地暂存区,为commit做准备
git add .git add --allgit add <file>

查看哪些改动将被提交 git diff --cached
如果不想将某个文件push到远程仓库,使用:git rm --cached 命令

第五步:将暂存区的文件提交到git本地仓库
git commit -m "my commit"

注意:

  • my first commit是对本次提交的说明,如果不加-m参数 ,git将调到一个文本编译器(通常是vim)来让你输入提交的描述信息
  • 如果没有新增(只有修改或删除),则可以使用git commit -a -m "my commit"将四五步合二为一
  • git commit --amend --no-edit 命令可以修改最近一次的提交说明(注释)【参考链接】

第六步:推送到远程github仓库
git push -u origin master (首次push要加参数 -u)

注意:

  • 如果git commit出现如下提示(// 需要输入用户名和密码)
    则需要配置一下邮箱和github用户名:
    git config --global user.email "aaon22357@163.com"
    git config --global user.name "aaon22357"
    之后再重新git commit即可。
  • 可以在本机配置,免输账号密码,配置方法见 【参考链接(Windows版)】
  • master表示主分支,也可以push到其他分支,将master参数替换成相应的分支名即可

2.3 Git删除仓库

删除本地仓库:rm -rf .git
删除远程仓库:github——打开需要删除的repo——Settings——一直往下拉,有个Delete this repository按钮——正确输入当前repo的名字——点击“I understand the consequences,delete this repository”按钮。

2.4 SSH Key的配置方法

前面提到,clone的时候有两种方式:SSH和HTTPS,两种方式的区别是:【参考】

  • HTTPS:使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处(发现了https免密登录的方式)。
  • SSH:使用SSH url克隆需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者或管理员,否则你是无法添加SSH key的。另外ssh默认是每次fetch和push代码都不需要输入账号和密码,如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置

生成ssh key的步骤:【参考链接,每一步有详细截图】

  1. 先看一下你C盘用户目录下有没有.ssh目录,有的话看下里面有没有id_rsa和id_rsa.pub这两个文件,有就跳到下一步,没有就通过下面命令创建
    $ ssh-keygen -t rsa -C "youremail@example.com"
    然后一路回车。这时你就会在用户下的.ssh目录里找到id_rsa和id_rsa.pub这两个文件。
  2. 登陆github,右上角图标——Settings——SSH and GPG KEYS——New SSH key——将刚刚生成的id_rsa.pub内容复制到Key内容框里——点击Add SSH key——完成。

三、常用命令

3.1 常用命令汇总

【查看类命令】

  • git log 查看git日志(或者git log --oneline 单行简单格式查看日志)
  • git log --graph 命令可以看到分支合并图
  • git log --graph --pretty=oneline --abbrev-commit (带参数)可以看到分支合并情况
    Git用(HEAD -> master)和(origin/master)标识出当前分支的HEAD和远程origin的位置,同理,branch分支的本地和远程状态,分别用(HEAD -> branch)和(origin/branch)标识。
  • git reflog 记录你的每一次命令
  • git status 查看当前所在分支状态
  • git diff 查看不同
  • git remote 查看远程库的信息
  • git remote -v 显示更详细的信息,显示抓取(fetch)和推送(push)的地址。如果没有push权限,就看不到push的地址。
git init 初始化仓库,在本地新建仓库会用到git remote add origin https://github.com/username/project.git 关联一个远程仓库
或者 git remote add origin git@github.com:username/project.git(推荐)需要配置sshgit add . 将文件加入暂存区
git commit -m "my commit" 将暂存区中文件提交到本地的版本库
git pull 拉取版本库最新数据到本地仓库
git push origin master  将本地仓库中新添加的文件上传到远程分支仓库
git push origin <branch> 将本地branch分支推送到远程仓库

3.2 Git分支管理

3.2.1 创建/切换/删除/合并命令

查看所有的分支和当前处于哪个分支:git branch
创建并切换到本地该分支:git checkout -b dev
创建本地仓库分支:git branch 分支名称
切换到本地某分支:git checkout 分支名称
合并指定分支到当前分支:git merge 分支名称
合并本地某分支到当前分支:git merge –no-ff -m “remark” 分支名称

删除本地仓库分支:git branch -d 分支名称
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。(-D参数表示强制删除)

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

3.2.2 分支管理

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

合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。(来自廖雪峰)

3.2.3 Rebase

小结(来自廖雪峰)

rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

3.3 Git撤销修改

【第一种情形】 丢弃掉工作区的修改:git checkout -- <file>

这里又可以分为两种情况:

  • 一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态(还没有使用git add,只是在本地做了修改,撤销修改就是回到版本库的状态)
  • 一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态(已经使用了git add添加到了暂存区,之后又在本地修改了,撤销修改就是撤回到暂存区的状态)
  • 总之,就是让这个文件回到最近一次git commit或git add时的状态。

【第二种情形】 撤回暂存区的修改: git reset HEAD <file>

这种情形描述的是:修改完文件后,已经git add到缓存区了(但是还没有git commit到版本库),此时发现错误,想要把暂存区的修改撤销掉(unstage),重新放回工作区。需要两步:
git reset HEAD <file> 将暂存区的修改撤销,放回工作区

注意:

  • git reset HEAD 如果后面什么都不跟的话,就是将暂存区里面的所有修改全部撤销
  • git reset HEAD <file> ,仅对暂存区中的file文件进行撤销

git checkout -- <file> 丢弃工作区的修改,回到最原始版本库的状态

【第三种情形】 撤回git commit: git reset --soft HEAD^
该操作适用于:已经git commit,只差push到远端repo这一步时,想要撤回commit操作的情况。这一步只会撤回commit这一步骤,不会修改代码。

3.4 Git删除文件

3.4.1 git clean

git clean的用法
git clean命令用来从工作区中删除所有没有tracked过的文件,git clean经常和git reset --hard一起结合使用. 记住reset只影响被track过的文件, 所以需要clean来删除没有track过的文件. 结合使用这两个命令能让你的工作目录完全回到一个指定的的状态。

查看哪些文件会被删除: git clean -n
删除当前目录下所有untracked files:git clean -f(不会删除.gitignore文件里面的东西)

3.4.2 git rm

git rm操作可以删除本地及版本库中的文件

删除github版本库中的file文件: git rm <file>
删除文件夹需要加-r参数,git rm -r <folder>

git rm --cached 操作删除仓库中的文件,保留本地的文件

如果某个文件不想上传,可以从暂存区及版本库中移除,但是不会删除本地的文件,这个文件之后的修改也不会被跟踪(untracked状态):git rm --cached <file>
对文件夹或文件路径操作,加-r参数:git rm -r --cached 文件夹或文件路径

3.5 Git版本回退

回退到上一个版本:git reset --hard HEAD^
往上回退100个版本:git reset --hard HEAD~100
撤销版本回退(回到未来):git reset --hard 1094a(未来版本的commit id)
本地版本回滚后,将本地的repo强制push到远程,即可实现远程版本回滚:git push origin master -f

版本回退总结(来自廖雪峰):
① HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
② 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
③ 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

3.6 Git标签管理

  • 打一个新标签:git tag <name> (默认标签是打在最新提交的commit上的)
  • 查看所有标签:git tag
  • 给某个commit id打标签:git tag <name> commit_id
  • 查看标签信息:git show <tagname>
  • 删除某个本地标签:git tag -d <tagname> (创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除)
  • 推送某个标签到远程,使用命令git push origin <tagname>
  • 一次性推送全部尚未推送到远程的本地标签:git push origin --tags
  • 删除某个远程标签: git push origin :refs/tags/<tagname>

【Attention】标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

3.7 git stash

git stash命令用于把当前工作现场“储藏”起来,等以后恢复现场后继续工作,在修复bug的时候比较常用。
git stash list查看隐藏的工作现场
git stash pop释放隐藏的工作现场

总结:

  • 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
  • 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
  • 在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

3.8 git add/git commit/git push区别

git add 命令会将文件加入暂存区,
git commit 会将暂存区中文件提交到git本地仓库,
git push 会将本地仓库中新添加的文件上传到远程分支仓库。

3.9 git status和git log区别

git status命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用git log.

四、常见问题及解决方案

4.1 本地和远程版本冲突

原因:本地和远程版本不一致,所以push出错,解决方案有以下几种:
【方法1】强制push:git push -f origin master
这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。

【方法2】将远程仓库pull下来——手动解决冲突——重新push

  • 将远程仓库pull下来:git pull origin master
    系统提示:CONFLICT (content): Merge conflict in cnn-visualization.py Automatic merge failed; fix conflicts and then commit the result.说明有冲突
  • 打开冲突文件,手动合并冲突,然后重新git add,这里一般会出现master|MERGING提醒,网上的解决方案是执行git reset --hard head,其实这种方法是错的,这是撤销合并,不能随便撤销,得根据实际情况,要是一个小白看了,直接照敲进去,可能自己辛辛苦苦写的代码就没了。(一定要注意!)正确做法是:合并好所有冲突,然后git commit,不出意外的话,此时的MERGING提示已经消失了。
  • 最后一步,重新push:git push origin master

【方法3】新建分支——push到新分支——分支合并
若不想merge远程和本地修改,可以先创建新的分支:git branch [name]
然后将本地仓库push到新建的分支中:git push -u origin [name]

4.2 本地分支和远程分支的链接关系没有创建

在多分支管理时,

多人协作的工作模式通常是这样:

首先,可以试图用git push origin <branch-name>推送自己的修改;如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

Github详细教程相关推荐

  1. 《GitHub详细教程》

    <GitHub详细教程>  [ http://blog.csdn.net/tangbin330/article/details/9128765 ] 该博客主要是讲解Git仓库的操作方法和原 ...

  2. 从Git的下载到使用github详细教程

    本篇主要针对git初学者,主要内容是从Git的下载安装到使用github的详细教程. 有些朋友可能使用过SVN,Git和SVN类似,是一种版本控制系统,一般软件从业者应该比较熟悉,但是如果是非软件从业 ...

  3. 【转载】GitHub详细教程

    1 Git详细教程 1.1 Git简介 1.1.1 Git是何方神圣? Git是用C语言开发的分布版本控制系统.版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态) ...

  4. GitHub 详细教程

    GitHub发现开源项目,提高工作效率   本文是<learn-github-from-zero>读书笔记,做了一些简洁化修改.   主要内容是GitHub页面介绍.Git Bash基础命 ...

  5. Git GitHub 简明教程

    Git & GitHub 简明教程 文章目录 Git & GitHub 简明教程 @[toc] 一. Git 安装 Linux 上安装 Git Mac 上安装 Git Windows ...

  6. GitHub+hexo搭建个人博客(2019新版超详细教程)

    GitHub+hexo搭建个人博客详细教程 原文链接 : GitHub+hexo搭建个人博客详细教程 前言 随着互联网浪潮的翻腾,国内外涌现出越来越多优秀的社交信息分享者,随之优秀的信息分享平台也越来 ...

  7. Windows下使用GitHub Pages搭建hexo博客详细教程以及Next主题超全配置

    根据下面的教程搭建的博客见这里 前言 马上要进入研究生了,不能再过浑浑噩噩的日子了,搭建一个小网站,用于记录自己所学的东西.其实,之前在腾讯云1元乞丐版上也搭建过博客,但是呢,只用来扯淡了.这次使用 ...

  8. Git 详细教程之五:SSH 免密登陆 GitHub

       由于每次 Git 对远程库 GitHub 进行推送(push)等操作时都需要进行登陆验证才可以进行,比较麻烦.本篇博客提供了一种新的链接方式:『Git 详细教程之五:SSH 免密登陆 GitHu ...

  9. GitHub+Hexo 搭建个人网站详细教程

    原文链接 GitHub+Hexo 搭建个人网站详细教程 前言: 随着互联网浪潮的翻腾,国内外涌现出越来越多优秀的社交网站让用户分享信息更加便捷.然后,如果你是一个不甘寂寞的程序猿(媛),是否也想要搭建 ...

最新文章

  1. BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】
  2. MPY634U 四象限模拟乘法器
  3. .Net转Java.02.数据类型
  4. 王树彤IT美女七年磨一剑
  5. python创造者_python 设计模式-建造者模式
  6. [给ASP.NET 初学者的话]不要练功练了三年,才发现自己必须「砍掉重练」!....学习ASP.NET之前,请先把自己杯中的水倒掉...
  7. S5PV210启动过程
  8. 【Tensorflow】深度学习实战02——Tensorflow实现进阶的卷积网络(CIFAR-10)
  9. 微软全球执行副总裁沈向洋:人工智能的机遇和挑战
  10. 大数据实战:如何实时采集上亿级别数据?
  11. 看大师讲解移动互联网前端开发流程
  12. 2021年9月25日PMI认证考点考场安排
  13. 边缘计算资源分配与任务调度优化综述
  14. java正则表达式获取书名
  15. 计算相似度的LLR算法
  16. 本地推送jar包到远程maven仓库
  17. android 内核调整工具,内核调谐器(Kernel Tuner)手机工具 for android v4.4.8 安卓版
  18. 留数定理 含 数学物理方法(吴崇试 第三版)答案详解
  19. THOMSON TG789vn 汤姆逊 tg789vn路由器配置
  20. 关于touch事件的使用 (touchStart touchMove touchEnd(不触发 android 4.0以上)) 滑动的使用

热门文章

  1. 服务器raid1硬盘更换,服务器做 Raid1,一块硬盘坏如何更换? - 电脑技巧 Power By www.hugesky.com...
  2. layui登陆验证页面模板(滑块学习)
  3. Python学习之路:函数传递可变参数与不可变参数
  4. 【kafka异常】使用Spring-kafka遇到的坑
  5. Vladik and fractions
  6. 成功的IT创始精英访谈之拉里·埃里森——甲骨文软件之父
  7. 打开word出现运行时错误‘-2147418113 (8000fff)‘的解决办法
  8. IDEA常用快捷键(四)--查找文件、查找类
  9. Harbor docker login x509 certificate signed by unknown authority
  10. 文件名、目录名或卷标语法不正确。