github 入门

最好的入门参考:链接

什么是 Github?

  github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。 Github 由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。迄今拥有59名全职员工,主要提供基于git的版本托管服务。

注册账户

  在github的官网注册一个属于自己的账号。https://github.com/

创建仓库

  创建一个属于自己的仓库,repository

git

下载

  官方下载: https://git-scm.com/download/win     (超级慢,不推荐)

  国内镜像下载:https://npm.taobao.org/mirrors/git-for-windows/    选择自己需要的版本(超级快)

安装

  双击看到的第一个界面如下图:

(1)使用许可声明

  点击“Next”进入下图页面:

(2)选择安装路径

  在输入框内输入想要安装到的本机路径,也就是实际文件夹位置,或点击“Browse...”选择已经存在的文件夹,然后点击“Next”按钮继续,进入下图界面:

(3)选择安装组件

  上图红框内的选项是默认勾选的,建议不要动。绿色框1是决定是否在桌面创建快捷方式的。绿色框2是决定在所有控制台窗口中使用TrueType字体和是否每天检查Git是否有Windows更新的。这些根据自己需要选择。

  点击“Next”按钮进入下图界面:

(4)选择开始菜单页

  这个界面是创建开始菜单中的名称,不需要修改,直接点“Next”按钮继续到下图的界面:

(5)选择Git默认编辑器

  这个页面是在选择Git文件默认的编辑器,很少用到,所以默认Vim即可,直接点“Next”按钮继续到下图的界面:

(6)调整PATH环境

  这个界面是调整您的PATH环境。

  第一种配置是“仅从Git Bash使用Git”。这是最安全的选择,因为您的PATH根本不会被修改。您只能使用 Git Bash 的 Git 命令行工具。但是这将不能通过第三方软件使用。

  第二种配置是“从命令行以及第三方软件进行Git”。该选项被认为是安全的,因为它仅向PATH添加了一些最小的Git包装器,以避免使用可选的Unix工具造成环境混乱。
您将能够从Git Bash,命令提示符和Windows PowerShell以及在PATH中寻找Git的任何第三方软件中使用Git。这也是推荐的选项。

  第三种配置是“从命令提示符使用Git和可选的Unix工具”。警告:这将覆盖Windows工具,如 “ find 和 sort ”。只有在了解其含义后才使用此选项。

  我选择推荐的选项第二种配置,点击“Next”按钮继续到下图的界面:

(7)选择HTTPS后端传输

  这个界面是选择HTTPS后端传输。

  第一个选项是“使用 OpenSSL 库”。服务器证书将使用ca-bundle.crt文件进行验证。这也是我们常用的选项。

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

  我使用默认选项第一项,点击“Next”按钮继续到下图的界面:

(8)配置行尾符号转换

  这个界面是配置行尾符号转换。

  第一个选项是“签出Windows风格,提交Unix风格的行尾”。签出文本文件时,Git会将LF转换为CRLF。提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是Windows上的推荐设置(“ core.autocrlf”设置为“ true”)

  第二个选项是“按原样签出,提交Unix样式的行尾”。签出文本文件时,Git不会执行任何转换。 提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是Unix上的建议设置(“ core.autocrlf”设置为“ input”)

  第三种选项是“按原样签出,按原样提交”。当签出或提交文本文件时,Git不会执行任何转换。不建议跨平台项目选择此选项(“ core.autocrlf”设置为“ false”)

  我选择第一种选项,点击“Next”按钮继续到下图的界面:

(9) 配置终端模拟器与Git Bash一起用

  这个界面是配置终端模拟器以与Git Bash一起使用。

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

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

  我选择默认的第一种选项,点击“Next”按钮继续到下图的界面:

(10)配置配置额外的选项

  这个界面是配置配置额外的选项。

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

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

  第三个选项是“启用符号链接”。启用符号链接(需要SeCreateSymbolicLink权限)。请注意,现有存储库不受此设置的影响。

  我勾选默认的第一、第二选项,点击“Next”按钮继续到下图的界面:

(11)配置实验选项

  这个界面是配置实验选项。

  启用实验性的内置添加 -i / -p。(新!)使用实验性的内置交互式add(“ git add -i”或“ git add -p”)。这使其速度更快(尤其是启动!),但尚未被认为是可靠的。

  默认不勾选,直接点击“Next”按钮继续到下图的安装进度界面:

(12) 安装进度指示

  安装进度结束之后,会出现下图的完成Git安装向导界面:

(13)安装完成

  在这个界面,可以勾选是否启动启动Git Bash和是否查看发行说明,然后点“Finish”按钮退出安装界面。

(14)启动测试

  到此,Git的安装完成,可以在开始菜单中看到Git的三个启动图标(Git Bash、Git CMD(Deprecated)、Git GUI)。

  Git Bash,是Git配套的一个控制台,点击打开如下图:

  Git CMD(Deprecated),是通过CMD使用Git(不推荐使用),点击打开如下图:

  Git GUI,是Git的可视化操作工具,点击打开如下图:

本地同步到库

 打开Git Bash,就是这样的一个黑框界面:

获取秘钥

  首先要在本地创建一个ssh key ,这个的目的就是你现在需要在你电脑上获得一个密匙,就是咱们平时的验证码一样的东西,获取之后,在你的GitHub账号里边输入之后,你的电脑就和你的GitHub账号联系在一起了,这样以后就可以十分方便的通过Git bash 随时上传你的代码。下边介绍一下如果获得这个钥匙,又是如何输入到你的GitHub里边的呢。

 上图这一栏 开始是你的计算机的名字@后边的内容是你的计算机型号,接下来就要开始创建属于你自己的秘钥,要在黑框里输入命令:(引号内需要改成你在注册GitHub的时候绑定的邮箱账号)

ssh-keygen -t rsa  -C  "your email@.com"  【ssh-keygen 之间无空格】

 

设置秘钥

  现在打开上述的存储.ssh文件的位置,打开id_rsa.pub文件,复制里面的内容(秘钥):

 

  现在需要登录你的Github账号,在settings界面中:

  找到SSH and GPG keys这个选项之后,在网页右上角点击new  SSH Key按钮创建秘钥,title是你给你的秘钥起一个标题,key里面就把你刚才复制的秘钥粘贴进去,点击add SSH KEY就可以了:

  之后再回到Git Bash,输入命令:$ ssh -T git@github.com   ,再输入yes, 出现如下界面,就说明链接成功了

ssh -T git@github.com

  接下来还需要设置一些账号名,邮箱,(name最好和GitHub上边的一样,email是一定要是注册GitHub的那个邮箱地址)

git config --global user.name "110SH"
git config --global user.email "mir_soh@163.com"

将仓库克隆本地

  打开你所创建的仓库:

 

  然后再打开Git Bash,将自己的文件存储定位在一个你代码所要存储的位置,在这里,我将定位在D盘code当中(默认本地是在C盘当中):

出现如下界面,说明定位成功。

  之后开始克隆一个仓库到本地:(gitclone后面的网址就是你之前创建的仓库的网址)

 git clone https://github.com/110SH/pan.git

  之后打开你所定位的D盘,就会出现一个跟你远程仓库一样的仓库文件夹:

  打开这个文件夹,随意的创建一个文件,(在这个文件夹下你就可以上传代码了,在这里我保存了一个文件)

  然后输入:ls命令,查看你目前所定位的文件夹中的文件:

 

  先在可以看出,我刚才所创建的文件已经在了。

  然后输入命令:git  add "file_name"    ,引号里面是你所要上传的文件名称,

git add "wxss之flex布局详讲.doc"

  然后在输入:git  commit -m "描述内容,备注"   ,输入之后出现以上情况:

git commit -m "first commit the file"

检测

  在输入git push origin main 之后会出现一个弹窗:

git push origin main 

  

   输入你之前注册github账号时的账号以及密码,点击login .出现以下界面:

 

  说明登录失败了,这时候根据提示继续再一次输入账号,密码 即可。(密码输入会弹出一个框再输入)

   出现上面界面,表示已经成功了。现在打开你的Github网站,找到你所创建的库,

你所创建的文件已经上传上去了。

再之后,你只需要将你的代码,放到库的对应的文件夹中,然后使用,git add 、git commit -m "   " 、最后git push origin main,

将你的代码提交就可以

git add “ ”
git commit -m "   " 
git push origin main 
或者
使用git push -u origin main -f 命令强制提交

修改文件 

删除文件(本机和远程) 

(1)对需要删除的文件、文件夹进行如下操作:

git rm test.txt (删除文件)

git rm -r test (删除文件夹)

(2)提交修改  

git commit -m "Delete some files."

(3)将修改提交到远程仓库的xxx分支:

git push origin xxx

删除远程仓库 但不删本地资源

我们在使用idea开发的过程中经常会出现新建项目的时候直接把xxx.iml文件也添加到了git trace

当然这并不会出现什么问题,问题是当我们把xxx.iml文件push到我们github上之后,然后在另一台电脑上pull了下来会出现一些问题,因为xxx.iml文件不是项目的源码。也就是说对于导入项目来说是多余的。

正规的源码目录:

  src/

  pom.xml

  .ignore

但是,我们又不能直接在本地删除xxx.iml。因为该文件是我们在本地开发的时候必须的。

那么问题来了:我们要在保留本地文件的情况下,删除远程仓库的文件(程序员一定要通过技术手段来实现目的,捂脸笑)

ok,废话不多说,下面是解决方案:

  把xxx.iml加到`.gitignore`里面忽略掉,然后提交使.gitignore生效,也既是

  git rm -r --cached xxx.iml  //-r 是递归的意思   当最后面是文件夹的时候有用

  (git add xxx.iml)      //若.gitignore文件中已经忽略了xxx.iml则可以不用执行此句

  git commit -m "ignore xxx.xml"

  git push

本地仓库更换绑定的远程仓库

方法一 通过命令直接修改远程地址

  1. 进入git_test根目录
  2. git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址
  3. git remote set-url origin http://192.168.100.235:9797/john/git_test.git

方法二 通过命令先删除再添加远程仓库

  1. 进入git_test根目录
  2. git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址
  3. git remote rm origin
  4. git remote add origin http://192.168.100.235:9797/john/git_test.git

方法三 直接修改配置文件

  1. 进入git_test/.git
  2. vim config 

    [core] 
    repositoryformatversion = 0 
    filemode = true 
    logallrefupdates = true 
    precomposeunicode = true 
    [remote "origin"] 
    url = http://192.168.100.235:9797/shimanqiang/assistant.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    [branch "main"] 
    remote = origin 
    merge = refs/heads/main

    修改 [remote “origin”]下面的url即可

方法四 通过第三方git客户端修改。

以SourceTree为例,点击 仓库 -> 仓库配置 -> 远程仓库 即可管理此项目中配置的所有远程仓库, 而且这个界面最下方还可以点击编辑配置文件,同样可以完成方法三。、

入门笔记

命令介绍

本地新建一个文件夹 ”Test“,而后进入

git init

把本地一个目录变成Git可以管理的仓库,瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了

编写一个 readme.txt文件,编码方法【UTF-8 without BOM】内容如下:

Git is a version control system.
Git is free software.

一定要放到  Test 目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

git add 文件名

把文件添加到仓库

git commit -m “修改的内容”

把文件提交到仓库,-m 后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录,另外 commit 可以一次提交很多文件

git commit 命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了内容(readme.txt有两行内容)。  

git status

上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改

git diff

 git diff 顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed单词

即如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

git log

git log 命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file

即可以查看提交历史,以便确定要回退到哪个版本

如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数

git reset --hard HEAD^ 

在Git中,用 HEAD 表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

git reflog

记录你的每一次命令,查看命令历史,以便确定要回到未来的哪个版本

git checkout -- file

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,即 用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

git reset HEAD <file>

可以把暂存区的修改撤销掉(unstage),重新放回工作区

 git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本

总结:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

添加远程库

在GitHub上创建一个同名的仓库

目前,在GitHub上的这个Test仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

现在,我们根据GitHub的提示,在本地的Test仓库下运行命令:

git remote add origin https://github.com/Hang-shao/Test.git

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

git branch -M main
git push -u origin main

把本地库的内容推送到远程,用git push命令,实际上是把当前分支main推送到远程。

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

推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:

从现在起,只要本地作了提交,就可以通过命令:

git push origin main

分支

git checkout -b dev

  或者

git switch -c dev

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

git branch dev
git checkout dev

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

切换到dev分支下,新建readme.txt

再切换到main分支,去查看:

git checkout main

  或者

git switch main

切换回main分支后,再查看一个readme.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而main分支此刻的提交点并没有变

git merge dev

git merge 命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

当然,也不是每次合并都能Fast-forward,我们后面会讲其他方式的合并。

git branch -d dev

  或者

git branch -D <name>  强行删除

删除后,查看branch,就只剩下master分支了:

git log --graph

可以看到分支合并图

git merge --no-ff -m "merge with no-ff" dev

合并分支时,加上--no-ff参数【表示禁用Fast forward】就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

git stash

把当前工作现场“储藏”起来,等以后恢复现场后继续工作

git stash list

查看存储在哪 ,然后想恢复:

git stash apply

恢复后,stash内容并不删除,你需要用git stash drop来删除

git stash pop

恢复的同时把stash内容也删了

git cherry-pick 4c805e2

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit>命令,把bug提交的修改“复制”到当前分支,避免重复劳动

git remote

  或者

git remote -v

查看远程库的信息

git push origin dev

推送分支,就是把该分支上的所有本地提交推送到远程库,推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上,例如将本地分支dev推送到远程分支上:

git pull

抓取远程的新提交

标签

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。

tag就是一个让人容易记住的有意义的名字,(别名)它跟某个commit绑在一起。

git tag <name>

新建一个标签,默认为HEAD,也可以指定一个commit id  

git show <tagname>

查看标签信息,还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字

git tag -d v0.1

删除本地标签,因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除

git push origin v1.0

推送某个标签到远程

git push origin --tags

一次性推送全部尚未推送到远程的本地标签

git push origin :refs/tags/v0.9

删除远程标签

参考

1、Git的安装与使用教程

 
posted @ 2020-02-17 16:55  PamShao  阅读(486)  评论(0编辑  收藏  举报