本文共 10146 字,大约阅读时间需要 33 分钟。
最好的入门参考:
github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。 Github 由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。迄今拥有59名全职员工,主要提供基于git的版本托管服务。
在github的官网注册一个属于自己的账号。
创建一个属于自己的仓库,repository
参考:
官方下载: https://git-scm.com/download/win (超级慢,不推荐)
国内镜像下载: 选择自己需要的版本(超级快)
双击看到的第一个界面如下图:
点击“Next”进入下图页面:
在输入框内输入想要安装到的本机路径,也就是实际文件夹位置,或点击“Browse...”选择已经存在的文件夹,然后点击“Next”按钮继续,进入下图界面:
上图红框内的选项是默认勾选的,建议不要动。绿色框1是决定是否在桌面创建快捷方式的。绿色框2是决定在所有控制台窗口中使用TrueType字体和是否每天检查Git是否有Windows更新的。这些根据自己需要选择。
点击“Next”按钮进入下图界面:
这个界面是创建开始菜单中的名称,不需要修改,直接点“Next”按钮继续到下图的界面:
这个页面是在选择Git文件默认的编辑器,很少用到,所以默认Vim即可,直接点“Next”按钮继续到下图的界面:
这个界面是调整您的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”按钮继续到下图的界面:
这个界面是选择HTTPS后端传输。
第一个选项是“使用 OpenSSL 库”。服务器证书将使用ca-bundle.crt文件进行验证。这也是我们常用的选项。
第二个选项是“使用本地 Windows 安全通道库”。服务器证书将使用Windows证书存储验证。此选项还允许您使用公司的内部根CA证书,例如通过Active Directory Domain Services 。
我使用默认选项第一项,点击“Next”按钮继续到下图的界面:
这个界面是配置行尾符号转换。
第一个选项是“签出Windows风格,提交Unix风格的行尾”。签出文本文件时,Git会将LF转换为CRLF。提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是Windows上的推荐设置(“ core.autocrlf”设置为“ true”)
第二个选项是“按原样签出,提交Unix样式的行尾”。签出文本文件时,Git不会执行任何转换。 提交文本文件时,CRLF将转换为LF。对于跨平台项目,这是Unix上的建议设置(“ core.autocrlf”设置为“ input”)
第三种选项是“按原样签出,按原样提交”。当签出或提交文本文件时,Git不会执行任何转换。不建议跨平台项目选择此选项(“ core.autocrlf”设置为“ false”)
我选择第一种选项,点击“Next”按钮继续到下图的界面:
这个界面是配置终端模拟器以与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”按钮继续到下图的界面:
这个界面是配置配置额外的选项。
第一个选项是“启用文件系统缓存”。文件系统数据将被批量读取并缓存在内存中用于某些操作(“core.fscache”设置为“true”)。 这提供了显着的性能提升。
第二个选项是“启用Git凭证管理器”。Windows的Git凭证管理器为Windows提供安全的Git凭证存储,最显着的是对Visual Studio Team Services和GitHub的多因素身份验证支持。 (需要.NET Framework v4.5.1或更高版本)。
第三个选项是“启用符号链接”。启用符号链接(需要SeCreateSymbolicLink权限)。请注意,现有存储库不受此设置的影响。
我勾选默认的第一、第二选项,点击“Next”按钮继续到下图的界面:
这个界面是配置实验选项。
启用实验性的内置添加 -i / -p。(新!)使用实验性的内置交互式add(“ git add -i”或“ git add -p”)。这使其速度更快(尤其是启动!),但尚未被认为是可靠的。
默认不勾选,直接点击“Next”按钮继续到下图的安装进度界面:
安装进度结束之后,会出现下图的完成Git安装向导界面:
在这个界面,可以勾选是否启动启动Git Bash和是否查看发行说明,然后点“Finish”按钮退出安装界面。
到此,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
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即可
以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 commit
或git add
时的状态。
git reset HEAD
可以把暂存区的修改撤销掉(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 maingit 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 devgit 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强行删除
删除后,查看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
新建一个标签,默认为HEAD
,也可以指定一个commit id
git show
查看标签信息,还可以创建带有说明的标签,用-a
指定标签名,-m
指定说明文字
git tag -d v0.1
删除本地标签,因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除
git push origin v1.0
推送某个标签到远程
git push origin --tags
一次性推送全部尚未推送到远程的本地标签
git push origin :refs/tags/v0.9
删除远程标签
2、
转载地址:http://gjvez.baihongyu.com/