学习笔记【Git】

作者: 旧灵魂curiosity | 来源:发表于2018-06-15 20:52 被阅读0次

1.Git简介

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

gitHub于2008年4月10日正式上线,除了git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuerypython 等。

2018年6月4日,微软宣布,通过75亿美元的股票交易收购代码托管平台GitHub。

git(/ɡɪt/[5],音频 帮助·信息)是一个分布式版本控制软件,最初由林纳斯·托瓦兹(Linus Torvalds)创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。应注意的是,这与GNU Interactive Tools[6](一个类似Norton Commander界面的文件管理器)有所不同。

git最初的开发动力来自于BitKeeper和Monotone[7][8]。git最初只是作为一个可以被其他前端(比如Cogito或Stgit[9])包装的后端而开发的,但后来git内核已经成熟到可以独立地用作版本控制[10]。很多著名的软件都使用git进行版本控制[11],其中包括Linux内核、X.Org服务器和OLPC内核等项目的开发流程[12].

命名来源

林纳斯·托瓦兹自嘲地取了这个名字“git”,该词源自英国俚语,意思大约是“混账”。[13][14]
“I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git.”
git的官方wiki也给出了多种关于这个名字的解释。[15]

主要功能

git是用于Linux内核开发的版本控制工具。与CVS、Subversion一类的集中式版本控制工具不同,它采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。git的速度很快,这对于诸如Linux内核这样的大项目来说自然很重要。git最为出色的是它的合并追踪(merge tracing)能力。

实际上内核开发团队决定开始开发和使用git来作为内核开发的版本控制系统的时候,世界上开源社区的反对声音不少,最大的理由是git太艰涩难懂,从git的内部工作机制来说,的确是这样。但是随着开发的深入,git的正常使用都由一些友善的命令来执行,使git变得非常好用。现在,越来越多的著名项目采用git来管理项目开发,例如:wine、U-boot等[19]。

作为开源自由原教旨主义项目,git没有对版本库的浏览和修改做任何的权限限制,通过其他工具也可以达到有限的权限控制,比如:gitosis、CodeBeamer MR。原本git的使用范围只适用于Linux/Unix平台,但在Windows平台下的使用也日渐成熟,这主要归功于Cygwin、msysgit环境,以及TortoiseGit这样易用的GUI工具。git的源代码中也已经加入了对Cygwin与MinGW编译环境的支持且逐渐完善,为Windows用户带来福音。


2.安装与配置

下载安装包地址:
https://git-scm.com/download/win

安装步骤:
1.打开安装包如下:

image.png

2.点击next,显示如下:


image.png

说明:
(1)图标组件(Addition icons) : 选择是否创建桌面快捷方式。
(2)桌面浏览(Windows Explorer integration) : 浏览源码的方法,使用bash 或者 使用Git GUI工具。
(3)关联配置文件 : 是否关联 git 配置文件, 该配置文件主要显示文本编辑器的样式。
(4)关联shell脚本文件 : 是否关联Bash命令行执行的脚本文件。
(5)使用TrueType编码 : 在命令行中是否使用TruthType编码, 该编码是微软和苹果公司制定的通用编码。


3.选择之后继续点击next:


image.png

设置环境变量
选择使用什么样的命令行工具,一般情况下我们默认使用Git Bash即可:
(1)Git自带:使用Git自带的Git Bash命令行工具。
(2)系统自带CMD:使用Windows系统的命令行工具。
(3)二者都有:上面二者同时配置,但是注意,这样会将windows中的find.exe 和 sort.exe工具覆盖,如果不懂这些尽量不要选择。


选择提交的时候换行格式
(1)检查出windows格式转换为unix格式:将windows格式的换行转为unix格式的换行再进行提交。
(2)检查出原来格式转为unix格式:不管什么格式的,一律转为unix格式的换行再进行提交。
(3)不进行格式转换 : 不进行转换,检查出什么,就提交什么。


image.png

6.如图点击install

image.png

配置步骤:
1.Git初始化配置 如图:
1) 配置使用git仓库的人员姓名
git config --global user.name "Your Name Comes Here"
2) 配置使用git仓库的人员email
git config --global user.email you@yourdomain.example.com

image.png

3.github与git的关联(远程仓库):

git是一个版本控制工具
github是一个用git做版本控制的项目托管平台。

  1. 到Github[4]注册账号。

  2. 本地配置用户名和邮箱(如果已经设置好,跳过该步):
    git config --global user.name "你的用户名"
    git config --global user.email "你的邮箱"
    如图所示:

    image.png
*   或者你直接在config文件里改,位置在 `C:\Users\你的用户名\.gitconfig` 。如下图所示,添加相应信息:
    ![image](https://img.haomeiwen.com/i7503725/6970bf436692e7b7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  1. 生成ssh key
    运行 ssh-keygen -t rsa -C "你的邮箱" ,它会有三次等待你输入,直接回车即可。

    image.png

    将生成的ssh key复制到剪贴板,执行 clip < ~/.ssh/id_rsa.pub (或者到上图提示的路径里去打开文件并复制):

  1. 打开Github,进入Settings:


    image

点击左边的 SSH and GPG keys ,将ssh key粘贴到右边的Key里面。Title随便命名即可。

点击下面的 Add SSH key 就添加成功了,如图。

image.png

测试一下吧,执行 ssh -T git@github.com

image.png

嗯,这样就成功了!



如何使用Git命令将项目从github克隆下来

a.在本地新建一个文件夹,作为本地仓库

$ cd /e/j330626

b.将本地仓库初始化

$ git init

d.将你需要的项目从github或者服务器上克隆下来,命令:git clone url url为项目服务器地址或github地址:

$ git clone git@github.com:horridguy12/document.git

看到上面显示100%就克隆好了。

4.常用 Git 命令清单。

几个专用名词的译名如下。

 Workspace:工作区
 Index / Stage:暂存区
 Repository:仓库区(或本地仓库)
 Remote:远程仓库

一、新建代码库

在当前目录新建一个Git代码库

$ git init

新建一个目录,将其初始化为Git代码库

 $ git init [project-name]

下载一个项目和它的整个代码历史

 $ git clone [url]

二、配置

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

显示当前的Git配置

 $ git config --list

编辑Git配置文件

 $ git config -e [--global]

设置提交代码时的用户信息

 $ git config [--global] user.name "[name]"

 $ git config [--global] user.email "[email address]"

三、增加/删除文件

添加指定文件到暂存区

 $ git add [file1] [file2] ...

添加指定目录到暂存区,包括子目录

 $ git add [dir]

添加当前目录的所有文件到暂存区

 $ git add .

添加每个变化前,都会要求确认

对于同一个文件的多处变化,可以实现分次提交

 $ git add -p

删除工作区文件,并且将这次删除放入暂存区

 $ git rm [file1] [file2] ...

停止追踪指定文件,但该文件会保留在工作区

 $ git rm --cached [file]

改名文件,并且将这个改名放入暂存区

 $ git mv [file-original] [file-renamed]

四、代码提交

提交暂存区到仓库区

 $ git commit -m [message]

提交暂存区的指定文件到仓库区

 $ git commit [file1] [file2] ... -m [message]

提交工作区自上次commit之后的变化,直接到仓库区

 $ git commit -a

提交时显示所有diff信息

 $ git commit -v

使用一次新的commit,替代上一次提交

如果代码没有任何新变化,则用来改写上一次commit的提交信息

 $ git commit --amend -m [message]

重做上一次commit,并包括指定文件的新变化

 $ git commit --amend [file1] [file2] ...

五、分支

列出所有本地分支

 $ git branch

列出所有远程分支

 $ git branch -r

列出所有本地分支和远程分支

 $ git branch -a

新建一个分支,但依然停留在当前分支

 $ git branch [branch-name]

新建一个分支,并切换到该分支

 $ git checkout -b [branch]

新建一个分支,指向指定commit

 $ git branch [branch] [commit]

新建一个分支,与指定的远程分支建立追踪关系

 $ git branch --track [branch] [remote-branch]

切换到指定分支,并更新工作区

 $ git checkout [branch-name]

切换到上一个分支

 $ git checkout -

建立追踪关系,在现有分支与指定的远程分支之间

 $ git branch --set-upstream [branch] [remote-branch]

合并指定分支到当前分支

 $ git merge [branch]

选择一个commit,合并进当前分支

 $ git cherry-pick [commit]

删除分支

 $ git branch -d [branch-name]

删除远程分支

 $ git push origin --delete [branch-name]

 $ git branch -dr [remote/branch]

六、标签

列出所有tag

 $ git tag

新建一个tag在当前commit

 $ git tag [tag]

新建一个tag在指定commit

 $ git tag [tag] [commit]

删除本地tag

 $ git tag -d [tag]

删除远程tag

 $ git push origin :refs/tags/[tagName]

查看tag信息

 $ git show [tag]

提交指定tag

 $ git push [remote] [tag]

提交所有tag

 $ git push [remote] --tags

新建一个分支,指向某个tag

 $ git checkout -b [branch] [tag]

七、查看信息

显示有变更的文件

 $ git status

显示当前分支的版本历史

 $ git log

显示commit历史,以及每次commit发生变更的文件

 $ git log --stat

搜索 提交历史,根据关键词

 $ git log -S [keyword]

显示某个commit之后的所有变动,每个commit占据一行

 $ git log [tag] HEAD --pretty=format:%s

显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件

 $ git log [tag] HEAD --grep feature

显示某个文件的版本历史,包括文件改名

 $ git log --follow [file]

 $ git whatchanged [file]

显示指定文件相关的每一次diff

 $ git log -p [file]

显示过去5次提交

 $ git log -5 --pretty --oneline

显示所有提交过的用户,按提交次数排序

 $ git shortlog -sn

显示指定文件是什么人在什么时间修改过

 $ git blame [file]

显示暂存区和工作区的差异

 $ git diff

显示暂存区和上一个commit的差异

 $ git diff --cached [file]

显示工作区与当前分支最新commit之间的差异

 $ git diff HEAD

显示两次提交之间的差异

 $ git diff [first-branch]...[second-branch]

显示今天你写了多少行代码

 $ git diff --shortstat "@{0 day ago}"

显示某次提交的元数据和内容变化

 $ git show [commit]

显示某次提交发生变化的文件

 $ git show --name-only [commit]

显示某次提交时,某个文件的内容

 $ git show [commit]:[filename]

显示当前分支的最近几次提交

 $ git reflog

八、远程同步

下载远程仓库的所有变动

 $ git fetch [remote]

显示所有远程仓库

 $ git remote -v

显示某个远程仓库的信息

 $ git remote show [remote]

增加一个新的远程仓库,并命名

 $ git remote add [shortname] [url]

取回远程仓库的变化,并与本地分支合并

 $ git pull [remote] [branch]

上传本地指定分支到远程仓库

 $ git push [remote] [branch]

强行推送当前分支到远程仓库,即使有冲突

 $ git push [remote] --force

推送所有分支到远程仓库

 $ git push [remote] --all

九、撤销

恢复暂存区的指定文件到工作区

 $ git checkout [file]

恢复某个commit的指定文件到暂存区和工作区

 $ git checkout [commit] [file]

恢复暂存区的所有文件到工作区

 $ git checkout .

重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

 $ git reset [file]

重置暂存区与工作区,与上一次commit保持一致

 $ git reset --hard

重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

 $ git reset [commit]

重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

 $ git reset --hard [commit]

重置当前HEAD为指定commit,但保持暂存区和工作区不变

 $ git reset --keep [commit]

新建一个commit,用来撤销指定commit

后者的所有变化都将被前者抵消,并且应用到当前分支

 $ git revert [commit]

暂时将未提交的变化移除,稍后再移入

 $ git stash

 $ git stash pop

十、其他

生成一个可供发布的压缩包

 $ git archive

相关问题:
1.fatal: not in a git directory

$ git init

相关文章

  • 学习笔记| git深入浅出 Part1_快速操作指南

    Git专题 学习笔记| git深入浅出 Part1_快速操作指南 学习笔记| git深入浅出 Part2_Git...

  • git 入门

    git 入门学习笔记----3个入门命令:git init、git add、git commit -v 学习场景(...

  • git记录

    Git Magic图解gitgit 学习笔记git游戏(学习)1、消除文档路径中文乱码git config --g...

  • Git学习笔记--常用命令整理

    超实用Git学习笔记 Git全局配置git config --global user.name "用户名"git ...

  • Git常用命令与学习总结

    安装Git Git的下载地址:Git官网下载地址 学习网址 git 学习笔记- Book 在线练习地址 基础常用指...

  • git学习笔记(二)—— git的简单操作

    这是本系列学习笔记的第二篇git 学习笔记(一)—— 初识 git 前言 本篇文章将简要的介绍 Git 的一般操作...

  • 关于crlf

    Git学习笔记:Git设置CRLF(行尾换行符) git config --global core.autocrl...

  • GIT

    Git学习笔记 Git 与 Github对接: cd到当前文档 git init初始化git git add -A...

  • Git学习笔记

    git学习笔记 声明 本文是本人学习Git过程中所做的笔记,以便日后查阅,文中多有错漏之处,不建议用作学习材料,文...

  • Git学习笔记

    git 学习笔记 注册个人信息 git config --global user.name(你的用户名) git ...

网友评论

    本文标题:学习笔记【Git】

    本文链接:https://www.haomeiwen.com/subject/xqomeftx.html