git使用笔记

目录

git安装及使用教程

下载和安装

1. 下载Git客户端

2. 安装Git客户端

选择安装组件 

选择Git使用的默认编辑器

开始菜单快捷方式目录

设置命令行工具

传输协议

选择换行格式

终端模拟器

配置额外的选项

Git配置

github免密登录

(1) 创建本地ssh

(2) 将ssh配置到GitHub中

(3)验证是否配置成功

配置本地用户和邮箱

gitignore白名单

Git命令

初始化

关联远程库

推送远程库

从远程库克隆

建远程库

克隆

本地仓库提交修改

版本回退

删除文件夹

分支

创建和切换分支

查看分支

合并某分支到当前分支

删除分支

本地分支与远程分支链接

查看远程库信息

推送本地分支

创建与远程分支对应的本地分支

标签管理

创建标签

指定标签信息

查看标签信息

查看所有标签

删除标签

推送标签到远程

删除远程标签

一个本地库既关联GitHub,又关联码云

码云推送远程库失败

一台电脑管理不同github账户下的项目


git安装及使用教程

下载和安装

1. 下载Git客户端

Git客户端下载地址 :https://code.google.com/p/msysgit/downloads/list 将地址复制到浏览器栏即可下载.

2. 安装Git客户端

欢迎界面 : 直接下一步;

协议 : 必须接受;

安装位置 : 预留100M空间, 自定义安装位置;

选择安装组件 

:也可以默认选择;

-- 图标组件(Addition icons) : 选择是否创建快速启动栏图标 或者 是否创建桌面快捷方式;

-- 桌面浏览(Windows Explorer integration) : 浏览源码的方法, 单独的上下文浏览 只使用bash 或者 只用Git GUI工具; 高级的上下文浏览方法 使用git-cheetah plugin插件;

-- 关联配置文件 : 是否关联git配置文件, 该配置文件主要显示文本编辑器的样式;

-- 关联shell脚本文件 : 是否关联Bash命令行执行的脚本文件;

-- 使用TrueType编码 : 在命令行中是否使用TruthType编码, 该编码是微软和苹果公司制定的通用编码; 

选择Git使用的默认编辑器

Use the Nano editor by default :默认使用 Nano 编辑器

Use Vim (The ubiquitous text editor) as Git's default editor:使用 Vim 作为 Git 的默认编辑器

Use Notepad++ as Git's default editor:使用 Notepad++ 作为 Git 的默认编辑器

Use Visual Studio Code as Git's default editor:使用 Visual Studio Code 作为 Git 的默认编辑器

开始菜单快捷方式目录

设置开始菜单中快捷方式的目录名称, 也可以选择不再开始菜单中创建快捷方式;

设置命令行工具

: 选择使用什么样的命令行工具, 一般情况下我们默认使用Git Bash即可, 默认选择;

-- Git自带 : 使用Git自带的Git Bash命令行工具;这是最安全的选择,因为您的PATH根本不会被修改。您只能使用 Git Bash 的 Git 命令行工具。

-- 系统自带CMD : 使用Windows系统的命令行工具;这个选项被认为是安全的,因为它只向PATH添加一些最小的 Git包,以避免使用可选的Unix工具混淆环境。 您将能够从 Git Bash 和 Windows 命令提示符中使用 Git。

-- 二者都有 : 上面二者同时配置, 但是注意, 这样会将windows中的find.exe 和 sort.exe工具覆盖, 如果不懂这些尽量不要选择; Git和可选的Unix工具都将添加到您计算机的 PATH 中,警告:这将覆盖Windows工具,如 “ find 和 sort ”。只有在了解其含义后才使用此选项。

传输协议

传输协议,第一个为https协议,第二个为ssl协议

Use the OpenSSL library

使用 OpenSSL 库,服务器证书将使用ca-bundle.crt文件进行验证。

Use the native Windows Secure Channel library

使用本地 Windows 安全通道库,服务器证书将使用Windows证书存储验证。此选项还允许您使用公司的内部根CA证书,例如, 通过Active Directory Domain Services 。

选择换行格式

-- 检查出windows格式转换为unix格式 : 将windows格式的换行转为unix格式的换行在进行提交;如果是跨平台的项目,在windows系统下安装git,则选择第一个。

-- 检查出原来格式转为unix格式 : 不管什么格式的, 一律转为unix格式的换行在进行提交;表示unix平台的项目。

-- 不进行格式转换 : 不进行转换, 检查出什么, 就提交什么;表示非跨平台的项目。

Checkout Windows-style,commit Unix-style line endings

在检出文本文件时,Git会将LF转换为CRLF。当提交文本文件时,CRLF将转换为LF。 对于跨平台项目,这是Windows上推荐的设置(“core.autocrlf”设置为“true”)

Checkout as-is , commit Unix-style line endings

在检出文本文件时,Git不会执行任何转换。 提交文本文件时,CRLF将转换为LF。 对于跨平台项目,这是Unix上的推荐设置 (“core.autocrlf”设置为“input”)

Checkout as-is,commit as-is

在检出或提交文本文件时,Git不会执行任何转换。对于跨平台项目,不推荐使用此选项(“core.autocrlf”设置为“false”)

终端模拟器

配置终端模拟器以与 Git Bash 一起使用

使用MinTTY:

Git的Windows客户端,会自带一个叫MinGW的Linux命令行工具,可以执行简单的shell命令,与cygwin功能类似,仅此而已。

而在MinGW命令行窗口中,执行命令“mintty”既可以打开mintty窗口,再次可以使用ssh命令登录linux服务器。

Use MinTTY (the default terminal of MSYS2)

Git Bash将使用MinTTY作为终端模拟器,该模拟器具有可调整大小的窗口,非矩形选区和Unicode字体。 Windows控制台程序(如交互式Python)必须通过'winpty'启动才能在MinTTY中运行。

Use Windows' default console window

Git将使用Windows的默认控制台窗口(“cmd.exe”),该窗口可以与Win32控制台程序(如交互式Python或node.js)一起使用,但默认的回滚非常有限,需要配置为使用unicode 字体以正确显示非ASCII字符,并且在Windows 10之前,其窗口不能自由调整大小,并且只允许矩形文本选择。

配置额外的选项

Enable file system caching

启用文件系统缓存

文件系统数据将被批量读取并缓存在内存中用于某些操作(“core.fscache”设置为“true”)。 这提供了显着的性能提升。

Enable Git Credential Manager

启用Git凭证管理器

Windows的Git凭证管理器为Windows提供安全的Git凭证存储,最显着的是对Visual Studio Team Services和GitHub的多因素身份验证支持。 (需要.NET Framework v4.5.1或更高版本)。

Enable symbolic links

启用符号链接(需要SeCreateSymbolicLink权限)。请注意,现有存储库不受此设置的影响。

开始安装 : 

安装结束 : over;

Git配置

github免密登录

(1) 创建本地ssh

使用命令 : 创建本地ssh

$ ssh-keygen -t rsa -C "2367746876@qq.com"

ps: -t rsa表示使用的算法,此选项为默认选项

GitHub邮箱 : 该命令后面的邮箱就是GitHub的注册邮箱

路径选择 : 使用该命令之后, 会出现提示选择ssh-key生成路径, 这里直接点回车默认即可, 生成的ssh-key在默认路径中;

密码确认 : 这里我们不使用密码进行登录, 用密码太麻烦;

(2) 将ssh配置到GitHub中

进入生成的ssh目录 : C:\Documents and Settings\Administrator\.ssh 中, 使用记事本打开 id_rsa.pub 文件, 将该文件中的内容复制;然后进入GitHub网站 : 登录GitHub,需要先注册,选择Setting 用户设置 :

选择左侧的SSH and GPG keys选项:

点击右侧的New SSH key :

将上面复制好的ssh-key复制进去 : 

(3)验证是否配置成功

使用命令 : 

ssh -T git@github.com  

成功提示 : 如果出现Hi han1202012! You've successfully authenticated, but GitHub does not provide shell access. 就说明配置成功, 可以连接上GitHub;

配置本地用户和邮箱

用户名邮箱作用 : 在使用git之前我们需要设置一个用户名 和 邮箱, 这是用来上传本地仓库到GitHub中, 在GitHub中显示代码上传者;

使用命令 : 

//设置用户名
$ git config --global user.name "***"

//设置邮箱
$ git config --global user.email "***@qq.com"

--global 是全局配置文件 ,配置文件为用户主目录下的.gitconfig文件。

配置大小写敏感

git config --global core.ignorecase false

gitignore

# .gitignore
*/migrations/*
!*/migrations/__init__.py

media/*
!media/cache
media/cache/*
!media/cache/readme.txt

Git命令

初始化

初始化一个Git仓库,使用git init命令

git init

添加远程库

先有本地库,后有远程库。

关联远程库

当我们已有本地库,还没有远程库时,怎么关联一个远程库。

首先在GitHub上建一个空的远程仓库。

然后在本地使用命令

git remote add origin git@githubname:path/repo-name.git

origin是远程库的名字,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

例:

推送远程库

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,就可以使用命令git push origin master推送最新修改。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

从远程库克隆

从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

建远程库

首先,登陆GitHub,创建一个新的仓库,名字叫gitskills。我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件。

克隆

现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库,克隆的链接地址在GitHub上,进入刚刚创建的远程库点击“Clone or download”即可复制链接。

$ git clone git@github.com:llf-1996/gitskills.git

Cloning into 'gitskills'...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3

Receiving objects: 100% (3/3), done.

注意把Git库的地址换成你自己的,然后进入gitskills目录看看,已经有README.md文件了。

从远程库clone时,默认情况下只能看到本地的master分支。

本地仓库提交修改

添加文件到Git仓库,分两步:

      1.使用命令git add <filename>,注意,可反复多次使用,添加多个文件;

      2.使用命令git commit -m <message>,message指本次提交的描述信息。

ps:

git add -A  提交所有变化;

git add -u  提交被修改(modified)和被删除(deleted)文件,不包括新文件(new);

git add .  提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件。

版本回退

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

回退到上一个版本:

 $ git reset --hard HEAD^

使用命令回退指定版本:

$ git reset --hard commit_id

用git log可以查看当前版本的提交历史;用git reflog查看所有命令历史。

删除文件夹

$ git rm --cached -r filedir

$ git commit -m "删除文件夹"

$ git push

分支

创建和切换分支

首先,我们创建dev分支,然后切换到dev分支:

$ git checkout -b dev

Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

$ git branch dev  # 创建dev分支

$ git checkout dev  # 切换到dev分支

Switched to branch 'dev'

查看分支

然后,用git branch命令查看当前分支:

$ git branch

* dev

  master

git branch命令会列出所有分支,当前分支前面会标一个*号。

分支合并

  1. merge
  2. marge 特点:自动创建一个新的commit,如果合并的时候遇到冲突,仅需要修改后重新commit。
    优点:记录了真实的commit情况,包括每个分支的详情
    缺点:因为每次merge会自动产生一个merge commit,所以在使用一些git 的GUI tools,特别是commit比较频繁时,看到分支很杂乱。

 

git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
    [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
    [--[no-]allow-unrelated-histories]
    [--[no-]rerere-autoupdate] [-m <msg>] [<commit>…​]
git merge --abort
git merge --continue



# dev分支到当前分支master上
git checkout master
git merge feature
rebase

rebase 特点:会合并之前的commit历史
优点:得到更简洁的项目历史,去掉了merge commit
缺点:如果合并出现代码问题不容易定位,因为re-write了history 

建议仅用于个人分支合并,不可合并多个分支。

git rebase [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>]
    [<upstream> [<branch>]]
git rebase [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>]
    --root [<branch>]
git rebase --continue | --skip | --abort | --quit | --edit-todo



# 合并master分支到个人分支
git checkout feature
git rebase master

删除分支

git branch -d <name>

删除dev分支

$ git branch -d dev
Deleted branch dev (was cf98a27).

本地分支与远程分支链接

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建。

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> dev

$

栗子:指定本地dev分支与远程origin/dev分支的链接

$ git branch --set-upstream-to=origin/dev dev
Branch dev set up to track remote branch dev from origin.
$

查看远程库信息

使用git remote -v;

$ git remote -v
origin  git@github.com:llf-1996/learngit.git (fetch)
origin  git@github.com:llf-1996/learngit.git (push)

推送本地分支

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交。

$ git push origin master

创建与远程分支对应的本地分支

从远程库clone时,默认情况下只能看到本地的master分支。在本地创建和远程分支对应的分支,使用命令:

git checkout -b branch-name origin/branch-name

本地和远程分支的名称最好一致;

本地新建的分支如果不推送到远程,对其他人就是不可见的。

标签管理

创建标签

命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id,指定commit id表示对此提交添加标签。

指定标签信息

命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

$ git tag -a v0.1 -m "version 0.1 released" 1094adb

 用-a指定标签名,-m指定说明文字,1094adb指对应的commit id。

查看标签信息

git show <tagname>查看标签信息:

$ git show v0.9

commit f52c63349bc3c1593499807e5c8e972b82c8f286 (tag: v0.9)

Author: Michael Liao <askxuefeng@gmail.com>

Date:   Fri May 18 21:56:54 2018 +0800


    add merge


diff --git a/readme.txt b/readme.txt

...

查看所有标签

命令git tag可以查看所有标签。

删除标签

$ git tag -d v0.1

Deleted tag 'v0.1' (was f15b0dd)

推送标签到远程

命令git push origin <tagname>可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签

例:

如果要推送某个标签到远程,使用命令git push origin <tagname>:

$ git push origin v1.0

Total 0 (delta 0), reused 0 (delta 0)

To github.com:michaelliao/learngit.git

 * [new tag]         v1.0 -> v1.0

推送全部尚未推送到远程的本地标签:

$ git push origin --tags

Total 0 (delta 0), reused 0 (delta 0)

To github.com:michaelliao/learngit.git

 * [new tag]         v0.9 -> v0.9

删除远程标签

命令git tag -d <tagname>可以删除一个本地标签;

命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

例:

1. 如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

$ git tag -d v0.9

Deleted tag 'v0.9' (was f52c633)

2. 然后,从远程删除。删除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9

To github.com:michaelliao/learngit.git

 - [deleted]         v0.9

一个本地库既关联GitHub,又关联码云

以learngit本地库为例,我们先删除已关联的名为origin的远程库:

$ git remote rm origin

然后,先关联GitHub的远程库(也可先关联码云):

$ git remote add github git@github.com:michaelliao/learngit.git

注意,远程库的名称叫github,不叫origin了。

接着,再关联码云的远程库

$ git remote add gitee git@gitee.com:liaoxuefeng/learngit.git

同样注意,远程库的名称叫gitee,不叫origin。

现在,我们用git remote -v查看远程库信息,可以看到两个远程库:

$ git remote -v

gitee    git@gitee.com:liaoxuefeng/learngit.git (fetch)
gitee    git@gitee.com:liaoxuefeng/learngit.git (push)
github    git@github.com:michaelliao/learngit.git (fetch)
github    git@github.com:michaelliao/learngit.git (push)

如果要推送到GitHub,使用命令:

git push github master

如果要推送到码云,使用命令:

$ git push gitee master

这样一来,我们的本地库就可以同时与多个远程库互相同步:

┌─────────┐ ┌─────────┐

│ GitHub  │ │  Gitee  │

└─────────┘ └─────────┘

     ▲           ▲

     └─────┬─────┘

           │

    ┌─────────────┐

    │ Local Repo  │

    └─────────────┘

码云推送远程库失败

错误信息如下:

解决方法:

ps: 也可以用此命令:git push -f,只有自己一个人用, git push -f表示将目前自己本机的代码库推送到远端,并覆盖,如果远程库只是个人再用可以使用此命令。

push推送

一台电脑管理不同github账户下的项目

情景:

我有company和home两个github账号,company在公司用, home在家里用,最近company账号的项目需要我在家里加班写,为了让home账号可以修改company账号上的远程库,我需要在company账号中添加home账号的ssh key 以便 home账号可以做修改和上传。

问题来了:当我在company账号添加home账号中的ssh key 提示我key已经被使用,无法添加;因为home的ssh key 已经被我添加home的账号中,无法再添加到别的账号下。

解放方案:在home账号的电脑下创建多个SSH key 提供给company账号一个ssh key绑定,这样home既可以修改自己的项目也可以修改company的项目。

开始

第一步:配置你的用户信息:(已经配置过请跳至第二步)

命令:

$ git config --global user.name "name"      //配置你的账户名字
$ git config --global user.email "email"    //配置你的创建github账户的邮箱;

查看已经配置好的用户信息:

$ git config user.name
$ git config user.email

第二步:生成ssh key
这里我先创建一个ssh key,就是默认选项创建的
命令:

$ ssh-keygen -t rsa -C "邮箱名"


创建好后,它会在你安装git目录下创建一个.ssh文件,
找到文件后打开;里面id_rsa.pub文件就是你的ssh key 复制到github上

现在我们创建第二个:

生成ssh key 命令:

$ ssh-keygen -t rsa -C Email

重点来了:

它会提示你输入一个保存key的文件名,这里不要回车,回车会默认创建文件名为 id_rsa,会覆盖我们前面创建的。

输入保存路径或文件名即可,即id_xyd。

成功以后,我们看下.ssh目录下

这个ssh key 就可以提供给别人,用来绑定在github上绑定;这里我提供给company账号绑定。

注意:添加新ssh key时,默认SSH只会读取id_rsa,所以为了让SSH识别新的私钥,需要将其添加到SSH agent。

使用命令:ssh-add ~/.ssh/id_rsa_me

如果报错:Could not open a connection to your authentication agent.无法连接到ssh agent
可执行ssh-agent bash命令后再执行ssh-add命

绑定好了之后,需要在.ssh文件配置 config,如果不配置账号可能会冲突,报错。
如果没有config 文件直接新建;以如下方式配置

# Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa

Host git
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa

参数:

每个秘钥单独配置一个Host,每个Host要取一个别名,每个Host主要配置HostName和IdentityFile两个属性即可。

1. Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:

Host mygithub 这样定义的话,命令如下,即git@后面紧跟的名字改为mygithub

git clone git@mygithub:PopFisher/AndroidRotateAnim.git

2. HostName      这个是真实的域名地址

3. IdentityFile      这里是id_rsa的地址

4. PreferredAuthentications   配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等

5. User        配置使用用户名

最后关联库的时候git remote add name git@github.com:path/repo-name.git,要修改git@github.com为配置文件config中host选项的信息。

栗子:

我给company的ssh key 是我后面新建的名字为 id_xyd.pub这个,我在host设置的host名字为github-xyd,关联库的时候就需要把前面的git@github.com这个修改为你修改的host名。

修改前:git@github.com:llf-1996/learngit.git

修改后:git@github-xyd:llf-1996/learngit.git 或者github-xyd:llf-1996/learngit.git


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值