教程地址:http://www.liaoxuefeng.com/wiki/
0x0.安装Windows:https://git-for-windows.github.io
0x1.运行
Git - > Git Bash
0x2。输入名称和电子邮件
$ git config --global user.name“Flywish”
$ git config --global user.email“my0127912@hotmail.com”
0x3.创建存储库
0x0.>创建一个空目录
$ mkdir learngit
0x1.>进入目录
$ cd learngit
0x2.>显示当前目录
$ pwd
注意:如果是windows,请确保目录是全英文。
0x3.>将此目录更改为Git可以管理的存储库。
$ git init
note-0:存储库已创建,不要手动修改此目录中的文件。
note-1:如果找不到“.git”目录,它只是隐藏默认,并出现命令:
$ ls -ah
0x4.将文件添加到存储库。
note-0:Git只能跟踪对文本文件的更改,因此我们应该使用纯文本编写文件。
note-1:如果windows,不要使用带有窗口的记事本编辑任何文本文件。 - 使用Notepad ++并将默认编码设置为UTF-8 wihtout BOM。
0x0.>创建一个文件名“readme.txt”,并进入“learngit”目录。它是一个Git存储库。
0x1.>将一个文件添加到存储库。
$ git add readme.txt
0x2.>将文件提交到存储库。
$ git commit -m“Wrote a readme.txt”
注意:我们可以一次提交多个文件。
0x5.提交要修改的文件。
0x0.>修改文件。
0x1.>检查修改
$ git diff
0x2.>提交修改后的文件。
$ git add readme.txt
错误:另一个git进程似乎在此存储库中运行。
方法:$ git rm .git / index.lock
$ git status - 告诉我们将提交的修改文件。
$ git commit -m“只是为了一些修改”
$ git status - 检查存储库的当前状态。
0x3.>检查历史记录
$ git log
$ git log --pretty = oneline
注意:提交id - SHA1(安全散列算法)为160位。
0x6.返回上一个版本。
注意:
“HEAD”:当前版本。
“HEAD ^”:最后的版本。
“HEAD〜3”:...
0x0.> git reset --hard HEAD ^
note-0:恢复最新版本
> git reset --hard commit_id(SHA1)
注1:Regret
命令记录:$ git reflog
0x7.撤销更改
0x0.>撤消工作目录更改
(在命令$ git add readme.txt之前或命令之前$ git commit -m“introduction”)
$ git checkout - readme.txt
0x1>撤消暂存区更改并返回到工作目录(在命令之前$ git commit -m“introduction”)
$ git reset HEAD readme.txt
0x2>撤销主(分支) - 本地存储库。
$ git reset --hard HEAD ^
0x8.删除文件
0x0.>在工作方向删除文件
$ rm readme.txt
0x1.>确认在存储库中删除。
$ git rm readme.txt
$ git commit -m“remove readme.txt”
0x2.恢复在工作方向意外删除文件。
$ git checkout - readme.txt
注意:git checkout(Repository - >工作目录)
0x9.Remote存储库
0x0.Register Github帐户。
0x1.创建SSH密钥
$ ssh-keygen -t rsa -C“my0127912@hotmail.com”
然后输入“enter”
现在,我们可以在用户目录中找到“.ssh”目录,然后我们可以找到两个文件名称“id_rsa”和“id_rsa.pub”。
注意:
id_rsa:私钥
id_rsa.pub:公钥
0x2.添加SSH密钥
登录GitHub,打开“设置”,然后选择“SSH和GPG密钥”。
然后单击“新建SSH密钥”,写一个标题并粘贴id_rsa.pub文件的内容。
然后单击“添加密钥”,您可以看到添加的密钥。
0xA.Add remote Repository
0x0>登录GitHub,然后创建一个新的存储库。
0x1>与远程存储库关联的本地存储库。
$ git remote add origin git@github.com:Floydwish / learninggit.git
注意:远程存储库名称是“origin”
0x2>将本地存储库内容推送到远程存储库。
$ git push -u origin master(第一次)
$ git push origin master(Later)
注意:“-u”:推送并关联。
0xB.Clone从远程存储库
0x0>创建远程存储库。
0x1>克隆本地存储库。
$ git clone git@github.com:Floydwish / gitskills.git
note0:
$ cd gitskills
$ ls
我们可以看到本地存储库的内容。
注1:
SSH协议:git://
https协议:https://github.com/Floydwish/gitskills.git
note2:我们必须知道远程存储库的地址,并使用“git clone”命令克隆到本地存储库。
0xC.Branch管理
> 0x0.创建并合并分支
>> 0x0.HEAD - > master - >最新提交
>> 0x1.创建分支名称“dev”并切换到“dev”分支。
$ git checkout -b dev
>> 0x2.列出所有分支和当前分支“*”。
$ git branch
>> 0x3.Submit changes in“dev”branch。
$ git add readme.txt
$ git commit -m“branch test”
>> 0x4切换到主分支。
$ git checkout master
>> 0x5.Merge“dev”分支到“master”分支。
$ git merge dev
注意:“git merge”用于将指定的分支合并到当前分支。
>> 0x6.删除“dev”分支。
$ git branch -d dev
>> 0x7.检查分支
$ git branch
> 0x1.解决冲突。
>> 0x0.创建一个名为“featurel”的分支
$ git checkout -b featurel
>> 0x1.将readme.txt文件的最后一行修改为
“创建一个新的分支是快速简单的”。
>> 0x2.在分支featurel提交更改。
$ git add readme.txt
$ git commit -m“AND simple”
>> 0x3.Switch to branch master。
$ git checkout master
>> 0x4.将readme.txt文件的最后一行更改为
“创建新分支快速简单”
>> 0x5.Submit分支主站的更改。
$ git add readme.txt
$ git commit -m“&simple”
>> 0x6.创建分支主控和特征。
$ git merge featurel
注意:readme.txt文件中存在冲突,我们应该在提交之前手动解决冲突。
>> 0x7.手动修改readme.txt文件
“创建一个新的分支是快速和简单的”。
>> 0x8.保存更改。
$ git add readme.txt
$ git commit -m“conflict fixed”
$ git log
>> 0x9.删除分支featurel。
$ git branch -d featurel
$ git log -graph
> 0x2.分支管理策略
注意:我们有两种模式来合并分支,一种是“快进”模式,另一种是“--no-ff”模式。
当我们在“快进”模式下删除分支时,我们将丢失分支的信息。
如果我们在“--no-ff”模式下删除分支,我们可以在分支历史信息中找到分支信息,因为Git将产生一个新的提交,我们可以看到它。
>> 0x0.创建一个名为“dev”的分支并切换到分支。
$ git checkout -b dev
>> 0x1.修改并提交readme.txt文件。
$ git add readme.txt
$ git commit -m“add merge”
>> 0x2.Switch到分支主站
$ git checkout master
>> 0x3.创建分支dev。(“ - no-ff”表示禁用“Fast forward”)
$ git merge --no-ff -m“merge with no-ff”dev
注意:“-m”与no-ff合并意味着在此合并操作中创建一个新提交。
$ git log --graph --pretty = oneline --abbrev-commit
> 0x3.Bug分支
注意:当我们有一个bug需要解决,但正在进行的工作还未完成时,
我们需要保存当前的工作,并修复bug后恢复当前的工作。
>> 0x0保存当前工作。
$ git stash
$ git status
>> 0x1.在分支主机上创建一个错误分支。
$ git checkout master
$ git checkout -b issue-001
>> 0x2.修复错误并提交。
$ git add readme.txt
$ git commit -m“fix bug 001”
>> 0x3.Switch to branch master and merge the branch master and issue-001。
$ git checkout master
$ git merge --no-ff -m“merged bug fix 001”issue-001
>> 0x4.删除错误分支
$ git branch -d issue-001
>> 0x5.Restore我们之前保存的工作,并删除存储。
$ git checkout dev
$ git status
$ git stash list
$ git stash pop
(或$ git存储应用
$ git stash drop)
$ git stash list
注:方法我们可以恢复具体的存储。
$ git stash apply stash @ {0}
> 0x4.Feature分支
注意:开发新功能
>> 0x0.添加新分支
$ git checkout -b feature-vulcan
>> 0x1.Commit to Stage(开发完成)
$ git add vulcan.py
$ git status
>> 0x2.Submit
$ git commit -m“add feature”
>> 0x3.Switch to branch dev
$ git checkout dev
>> 0x4.Merge然后删除新的分支功能-van
$ git merge feature-vulcan
$ git branch -d feature-vulcan
>> 0x5.Delete失败,因为分支未合并,如果我们删除,我们将丢失更改。所以我们需要强行删除。
$ git branch -D feature-vulcan
> 0x5.多人协助。
>> 0x0.View远程存储库信息
$ git remote ---为简单的信息
$ git remote -v ---详细信息
注意:我们可以获取获取和推送的地址。
>> 0x1.Push local到远程仓库。
注意:推式分支用于将分支上的提交推送到远程存储库。
$ git push origin master - push branch master
$ git push origin dev - push branch dev
>> 0x2.Fetch branch
$ git clone git@github.com:Floydwish / learngit.git
$ git branch
注意:只有当我们克隆远程存储库时,其他人才能看到的分支主。
>> 0x3.当其他人想在分支dev开发时,他必须创建一个远程分支dev到本地。
$ git checkout -b dev origin / dev
>> 0x4.当其他人想把分支dev推送到远程仓库。
$ git commit -m“add / usr / bin / env”
$ git push origin dev
>> 0x5。同样,如果我想推动分支dev到远程存储库,当同一文件更改。
$ git add checkout.py
$ git commit -m“add coding:utf-8”
注意:提交冲突。
>> 0x6.我需要拉最新的提交。
$ git pull
注意:获取拉失败,我需要指定本地dev分支到远程origin / dev分支的链接
$ git branch --set-upstream dev origin / dev
$ git pull
>> 0x7.Merge,submit和push。
注意:合并冲突,需要手动修复。
$ git commit -m“merge&fix checkout.py”
$ git push origin dev
注意:
>查看远程存储库:$ git remote -v
>将本地分支推送到remote:$ git push origin dev
>如果push失败,$ git pull(然后提交)
>创建与远程分支对应的本地分支:
$ git checkout -b dev origin / dev
>建立本地分支和远程分支之间的关联:
$ git branch --set-upstream dev origin / dev
>使用“git pull”抓取远程分支。如果有冲突,我们必须首先处理冲突。
0xD.标签管理
注意:要发布版本,我们通常首先在存储库中播放标签,以便我们可以确定标签的版本。
> 0x0.Create tag
>> 0x0.Switch到需要标记的分支。
$ git branch
$ git checkout master
>> 0x1.Make一个新的标签(最新的默认提交)
$ git tag v1.0
$ git tag
>> 0x2.为hository提交创建一个标签(首先查找提交ID)
$ git log --pretty = oneline --abbrev-commit
$ git tag v0.9 6224937(A history commit id)
$ git tag
注意:标签的顺序与时间无关,它与字符的顺序有关。
>> 0x3.check标签的信息
$ git show 0.9
>> 0x4.创建一个包含介绍的新标签。
$ git tag -a v0.1 -m“version 0.1 released”3628164
$ git show v0.1(检查introdnction)
>> 0x5.通过私钥签署一个标签。(_ s)
$ git tag -s v0.2 -m“签名版本0.2发布”fec145a
注意:如果我们还没有安装GnuPG,则会出现错误(因为该符号使用了PGP)
方法:参考GnuPG帮助文档配置密钥。
$ git show v0.2(告诉我们PGP标志的信息)
> 0x1.操作标签
>> 0x0.如果标记错误,请删除标记。
$ git tag -d v0.1
>>将标签推送到远程存储库。
$ git push origin v1.0
>>将所有标签推送到远程存储库。
$ git push origin --tags
>> 0x1。删除推送到远程存储库的标记。
$ git tag -d v1.0(删除本地标签)
$ git push origin:refs / tags / v1.0(删除远程标签)
注意:登录GitHub以确认标记已在远程存储库中删除。
0xE.使用 GitHub
官方库 - “Fork” - >远程存储库< - “拉取请求” - - “克隆” - >本地存储库。
0xF.Customize Git
> 0x0,设置颜色
$ git config --global color.ui true
$ git status
> 0x1.忽略特殊文件
>> 0x0.在Git工作区的根目录中创建一个特殊的.gitignore文件,并填写要忽略的文件名。然后Git会自动忽略这些文件。
>> 0x1.忽略文件的原则:
>>> 0x0.Igmore操作系统自动生成的文件,如缩略图等。
>>> 0x1.Ignore编译器生成的中间文件,可执行文件等。
>>> 0x2.Ignore您自己的配置文件与敏感信息,如存储密码的配置文件。
>> 0x2.将.gitignore文件提交到Git
>> 0x3.强制将文件添加到Git。
$ git add -f App.class
>> 0x4.检查.gitignore文件的规则。
$ git check-ignore -v App.class
> 0x2.配置别名
$ git config --global alias.st status
$ git st
> 0x3.配置文件
$ git config --global alias.st status(当前用户)
$ git config alias.st status(当前存储库)
note0:每个存储库的配置文件都放在“.git / config”文件中。
note1:如果要删除别名,请删除配置文件的行。
note2:当前用户的Git配置文件放在用户主目录中的隐藏文件.gitconfig中。
0x10.建立一个Git服务器。
注意:linux机器。
> 0x0.安装Git
$ sudo spt-get install git
> 0x1.创建一个git用户。
$ sudo adduser git
> 0x2.创建证书。
> 0x3.初始化Git的存储库。
> 0x4.Disable shell登录
> 0x5.Clone远程存储库
> 0x6.管理公钥(工具:Gitosis)
> 0x7.Management权限(工具:Gitolite)
摘要-0:
工作区 - >存储库(阶段和分支)
工作区 - >阶段 - >主(分支) - >远程存储库
命令:
$ git add
$ git commit -m
总结-1:Git跟踪和管理修改,而不是文件。 - Git的功能。
HEAD和readme.txt之间的区别
命令:git diff HEAD - readme.txt
摘要-2:
多人协作工作方式:
>推送自己的更改
$ git push origin dev
>如果推送失败,原因是远程分支更新比我们的本地分支更新。
我们需要合并分支
$ git pull
>如果建议“没有跟踪信息”,则不创建本地分支和远程分支之间的链接。
>如果合并有冲突,请解决冲突并在本地提交。
>然后我们可以推动成功。
$ git push origin dev