菜鸟级Git GitHub创建仓库

时间:2023-03-09 09:10:59
菜鸟级Git  GitHub创建仓库
菜鸟标准:知道pwd ,rm 命令是什么。
一、Git 是什么。
git 是目前世界上最先进的分布式版本控制系统
二、SVN与Git
1.版本控制系统
SVN 是集中式版本控制系统,版本库是集中放在*服务器的。
Git 更倾向于分布式模式。也就是每个开发人员从中心版本库/服务器上 checkout 代码后会在自己的机器上克隆一个自己的版本库。当突遇没有网络的环境时,分布式的操作模式将是一个巨大的恩赐。
你不必做出补丁包,通过email 方式发送出去,只需要创建一个分支,向项目团队发送一个推请求,就能让你的代码保持最新,而且不会在传输过程中丢失。GitHub.com 就是其中一个优秀的案例。
2.数据方式存储
Git 元数据存储方式,而svn 按文件 。.git 目录处于机器上的一个克隆版的版本库,它拥有中心版本库中所有东西,如标签,分支,版本记录等。如果你把.git 目录的体积和.svn 相比较,会发现它们相差很大。
3.分支不同
分支在SVN中就是版本库中的另一个目录。如果你想知道是否合并了一个分支,你需要手工运行命令: svn propget svn:mergeinfo 来确认代码是否被合并。所以,经常会发生分支被遗漏的情况。
Git 却可以从同一个目录下快速在多个分支间切换。因为很容易发现未被合并的分支,你能简单而快捷的合并这些文件。
4.全局的版本号
Git 没有,SVN有。SVN的版本号实际是任何一个相应时间的源代码快照,因此也被认为是从CVS 进化到SVN 的最大突破。也有开发者指出,可以使用GIT 的 SHA-1 来唯一的标识一个代码快照。用途相同,但并不能完全代替SVN 里容易阅读的数字版本号。
5内容完整性
Git 内容存储使用的是SHA-a 哈希算法。这能确保代码内容的完整性,尤其遇到磁盘故障和网络问题时降低对版本库的破坏。
版本控制要结合公司策略选用合适的工具。版本控制不只是工具,工具也不只是代码管理。
由于 SVN 是集中式,会出现耦合。所以要求开发代码规范。当然,任何不可运行的代码的提交都是没有意义的(即提交的粒度:原子性)。
三、安装Git
msysgit 是 windows版的Git ,可直接网上下载。安装成功后,在开始菜单里 “Git - Git Bash” 会弹出一个类似命令窗口,表示Git安装成功。
因为Git 是分布式版本控制系统,需要填写用户名和邮箱作为一个标识。所以,在命令行中输入:
git config --global user.name "yourname"
git config --global user.email "youremail@qq.com"
注:global 表示机器上所有Git 仓库都会使用这个配置。
四:操作步骤
1.创建版本库 repository
举例:在D 盘 gitdemo文件目录下新建一个gitdemo1 版本库
菜鸟级Git  GitHub创建仓库
2.修改并提交仓库
在gitdemo1 目录下新建记事本 readme.txt, 内容为1
菜鸟级Git  GitHub创建仓库
此时,在readme.txt 增加一行 22
在命令行中输入git status , git diff readme.txt
菜鸟级Git  GitHub创建仓库
我们可以看到,readme.txt 内容从一行1 改成 二行22 内容
此时可以放心提交到仓库了。
git add
git commit
3.版本回退
在readme.txt 中增加一行 333
菜鸟级Git  GitHub创建仓库
git log 命令显示从最近 到最远的显示日志
可以使用git log -pretty=oneline 演示如下
版本回退操作,有两种命令。
1.git reset -hard HEAD^ , 如果回退到上上个版本,改成HEAD^^, 回退100 个版本
git reset -hard HEAD~100
菜鸟级Git  GitHub创建仓库
版本回退,使用 git reset --hard
问题:已经关掉一次命令行,或者333 的内容版本号我们并不知道,我们如何知道 要增加333 内容的版本号呢。
git reflog
菜鸟级Git  GitHub创建仓库
增加内容333的版本号为 fa2740f
git reflog --hard fa2740f 来恢复
4工作区与暂存区
工作区:电脑上看得到的目录,或者需要新建的目录文件等
版本库:工作区有一个隐藏目录.git , 这属于版本库。版本库中存放很多东西,其中最重要的就是stage (暂存区), 还有Git 为我们自动创建了第一个分支master , 以及指向 master 的一个指针HEAD
前文已知道,Git 提交文件到版本库有两步
1.git add , 把文件添加到暂存区
2. git commit 提交更改,把暂存区的所有内容提交到当前分支上。
在readme.txt 增加一行4444, 新增文件 test.txt
菜鸟级Git  GitHub创建仓库
git add 命令添加到暂存区中,git status 查看状态
git commit 提交全部文件
菜鸟级Git  GitHub创建仓库
5.Git 撤销修改和删除文件操作
1.撤销修改
在readme.txt 文件中增加一行 55555
在我未提交前,我发现添加 55555 内容有误,可以有几种方法恢复以前版本。
第1:如果知道要删除的内容,直接手动更改,然后add 添加到暂存区,最后 commit 掉
第2:恢复到上一个版本: git reset --hard HEAD^
可否直接使用撤销命令呢?
cat readme.txt 查看当前内容
先git status 查看一个当前状态
git checkout --file 把文件在工作区做的修改全部撤销。这里有两种情况:
第1:readme.txt 自动修改后,还没有放到暂存区,使用撤销修改就回到和版本库一模一样的状态
第2.另外一种是readme.txt 已经放入暂存区,又作了修改,撤销修改就回到添加暂存区后的状态。
对于 第2种情况,我们继续假定readme.txt 添加一行内容为666666 ,
git add 添加到暂存区,
接着添加内容 7777777
此时我们想通过撤销命令让其回到暂存区后的状态。
2删除文件
假如我们在版本gitdemo1 目录下添加一个文件 b.txt
菜鸟级Git  GitHub创建仓库
继续查看 b.txt 文件已经删除了,此时有两个选择
1.直接commit
2.从版本库中恢复被删除的文件
注:没有commit 之前,可以使用命令 git checkout -- b.txt 执行文件恢复操作
6远程仓库
先注册gitHub 帐号
本地Git 仓库与GitHub 仓库之间通过SSH 传输加密的。
第1:创建SSH key 。用户主目录下如果没有 .ssh 目录,目录下没有 id_rsa和 id_rsa.pub 两个文件,执行以下命令:
ssh-keygen -t rsa -C "youremail@example.com"
注:id_rsa 是私钥,一般不透露。id_rsa.pub 是公钥,可以告诉任何人。
第2:登录github, 打开 settings - Add SSH Key , (进入路径可不同,有多种方式),填上任意title, 在Key 文本框里粘贴 id_rsa.pub 文件内容。
菜鸟级Git  GitHub创建仓库
操作1:添加远程库
保持本地Git 仓库 和 githug 上的仓库进行远程同步
首先,github 右上角 “New repostory”
菜鸟级Git  GitHub创建仓库
Repository Name 填 gitdemo01 ,点击创建
此时testgit 仓库是空的,我们可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后把本地仓库的内容推送到github 仓库。
本地运行命令
git remote add origin https://github.com/xxx/gitdemo01.git
菜鸟级Git  GitHub创建仓库
使用 git push 命令将本地内容推送到远程,实际上是把当前分支 master 推送到远程。
注:此时远程库是空的,我们第一次推送 master 分支时,加上 -u 参数,Git 不但会把本地master 分支内容推送的远程新的 master 分支,还会把本地master 分支和远程 master 分支关联起来,在以后的推送或者摘取时就可以简化命令。推送成功后,可以立刻在github 页面上看到远程和本地仓库内容已同步。
此后,本地修改可通过命令修改提交:
git push origin master
现在,我们拥有了一个真正的分布式版本库。
操作2:从远程克隆到本地
首先登录github , 创建名为 gitdemo02 新仓库,注意多一步勾选 Initialize this repository
菜鸟级Git  GitHub创建仓库
执行命令
git clone
菜鸟级Git  GitHub创建仓库
此时,本地获取同步目录 gitdemo02
7创建与合并分支
HEAD 严格来说,不是指向提交,而是指向master , master 指向提交,所以,HEAD 指向当前分支。
每次提交,Git 都把它们串成一条时间线,这条时间线就是一个分支,截止目前,只有一条时间线,在Git 里,这个分支称之为 主分支,即master 分支。
首先,创建 dev 分支,然后切换到 dev 分支上。
git branch dev
git checkout dev
两条命令可以合并为:
git checkout -b , -b 表示创建并切换
git branch 列出所有分支,并在当前分支前显示星号。
菜鸟级Git  GitHub创建仓库
我们在readme.txt 添加内容7777777。
查看内容,并提交。
菜鸟级Git  GitHub创建仓库
切换到主分支 master 上,继续查看内容
git check master
菜鸟级Git  GitHub创建仓库
可以看到,添加到分支dev 上的内容 7777777 不见了。因为这里是master .
使用命令:git merge 命令,可以合并指定分支到当前分支上。
菜鸟级Git  GitHub创建仓库
此时,可以删除dev 分支。
命令:git branch -d name
菜鸟级Git  GitHub创建仓库
小结创建与合并分支:
查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到当前分支:git merge name
删除分支:git branch -d name
8如何解决冲突
新建一个分支 branch02
在readme.txt 中添加一行88888888,然后提交。
菜鸟级Git  GitHub创建仓库
切换到master ,在最后一行添加 99999999
菜鸟级Git  GitHub创建仓库
现在我们需要在分支上来合并 branch02, 发现冲突。
菜鸟级Git  GitHub创建仓库
注:<<<<<<, ======, >>>>>> 用于标记不同分支的内容。
<<<HEAD 指主分支修改的内容。>>>branch02 指branch02 上修改的内容。
我们可以本地修改并保存
菜鸟级Git  GitHub创建仓库
使用git log 可查看分支合并情况
9分支管理策略
通常合并分支时 , git 一般使用"Fast forward "模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 -no-ff 来禁用此模式。
demo演示
1.创建dev 分支
2.修改readme.txt 内容
3.添加到暂存区
4.切换回主分支 master
5.合并dev 分支,使用命令 git merge -no-ff -m 注释 dev
6.查看历史记录
菜鸟级Git  GitHub创建仓库
分支策略:主分支master 通常用来发布新版本,一般不允许在上面干活。
常在分支dev 上干活,分支代码稳定后可以合并到主分支master 上来。
10bug 分支
在Git 中,每个bug 都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临朝的分支删除掉。
比如404错误。当前dev 分支上的工作还没有提交,或者工作进行一半时候,我们无法提交。怎么办呢?Git 提供一个stash 功能,可以把当前工作现场进行隐藏,等以后恢复工作后继续工作。
命令stash ,并查看状态
git stash
git status
菜鸟级Git  GitHub创建仓库
首先,我们要确定在哪个分支上修复bug, 比如,在主分支master 上来修复,现在我们在master 分支上创建一个临时分支,
演示:
在master 分支上创建临时分支 issue-404
查看内容,修改后查看内容,修改完成后,切换到master 主分支上并完成合并,最后删除issue-404分支。完成后,回到dev 分支上开始干活
菜鸟级Git  GitHub创建仓库
现在工作区是干净的,如何恢复工作场呢?我们可以使用命令git stash list 来查看。
菜鸟级Git  GitHub创建仓库
工作场还在,Git 把stash 内容存放在一边,恢复工作可以使用如下两个方法:
1.git stash apply , 恢复后stash 内容并不删除,你需要使用命令 git stash drop 删除。
2.git stash pop ,恢复的同时把stash 内容也删除。
11 多人协作
远程克隆时,实际上Git 自动把本场的master 分支和远程的master 分支对应起来了,并且远程库的默认名称是origin
1.查看远程库信息:git remote
2.查看远程库详细信息:git remote -v
菜鸟级Git  GitHub创建仓库
分为抓取分支,推送通知。
1.推送分支
推送分支就是把该分支上所有本地提交到远程库中,推送时,要指定本地分支。这样,Git就会把该分支推送到远程训对应的远程分支上。
命令:git push origin master
菜鸟级Git  GitHub创建仓库
推送成功。
假如需要推送到dev 分支上,命令:git push origin dev
哪些分支要推送呢?
1.master 主分支需要保持与远程同步
2.一些bug 分支不需要推送到远程,可以先合并到主分支上,再把主分支master 推送到远程。
2.抓取分支
模拟一下多少协作场景。成员将各自修改推送到各自的master 分支上。另一同事在另一台电脑(注意配置SSH key ),或者同一电脑不同目录克隆,新建目录名字gitdemo2
我们首先把dev 分支推送到远程中。
菜鸟级Git  GitHub创建仓库
在将gitdemo2 目录克隆到本地
菜鸟级Git  GitHub创建仓库
现在小伙伴要在dev 分支上开发,必须把远程的origin 的dev 分支到本地来,于是可以使用命令创建本地dwv 分支 : git checkout -b dev origin/dev
现在可以开发了,开发完成后把dev 推送到远程库即可。
菜鸟级Git  GitHub创建仓库
命令:
git add readme.txt
git commit -m "readme.txt 修改xxx内容"
把现在在dev 分支推送到远程:git push origin dev
此时,小伙伴最新提交的与我试图推送的有冲突。
菜鸟级Git  GitHub创建仓库
先用git pull 把最新提交的从origin/dev 抓下来,然后在本地合并,解决冲突再进行推送。
菜鸟级Git  GitHub创建仓库
oh, no 命令 git pull 也失败了,原因是没有指定本地dev 分支与远程 origin/dev 分支的链接。根据提示,设置 dev 和 origin/dev 链接。
git branch --set-upstream dev origin/dev
菜鸟级Git  GitHub创建仓库
此时,git pull 一下。bingo 成功了。合并有冲突,需要手动解决。解决方法和分支管理中解决冲突完全一样。解决后,提交,再push
git add readme.txt
git commit -m "merge & fix readme.txt"
git push origin dev
因此,多人协作工作模式一般是这样的
1.git push origin branch-name 推送
2.推送失败,远程分支比本地更新的早,需要先git pull 试图合并。
3.如果合并有冲突,解决冲突,并在本地提交。再用git push origin branch-name 推送。
总结:
日常使用Git 建议
1.日志输出参数 .示例 git log --oneline --graph
2.查看文件详细变更:示例:git -log -p filename
3.查看文件中指定位置的变更 示例:git log -L 1, 1:some-file.txt
4.查看尚未合并的变更 示例:git log --no-merges master
5.查看其他分支中的文件 示例:git show some-branch:some-file.js
6.关于变更基线的几点说明 示例:git pull --rebase
7.本地合并后保留分支结构 示例 git merge --no-ff
8 修复而非新建提交 示例:git commit --amend
9 Git 中的三种状态及相互转换 示例:git reset --hard HEAD 与 git status -s
10撤销而不产生提交信息 示例:git revert -n
11用第三方差异工具查看整个工程而非单个目录的差异 示例:git difftoll -d
12忽略空格变更 示例:git diff -w 或 git blame -w
13 追加文件中的部分变更 示例:git add -p
14 发现并清理无用分支 示例:git branch -a
15 暂存部分文件 示例 git stash --keep-index 或 git stash -p
16写好提交信息 示例:-应用这次提交,可以更新**README文件**
--应用这次提交,为调用GET/user/:id API 追加确认
--应用这次提交,回退到**11111*版本*
17Git自动补全 https://git-scm.com/book/en/v1/Git-Basics-Tips-and-Tricks#Auto-Completion
18创建常用命令的别名
示例 git config --global alias.l "log --oneline --graph"
这个命令会创建一个新的git 别名l ,git l 代替git log -oneline -graph
也可以在alias 附加其他的参数。如git l -author = "Mike"
19 快速定位故障版本 示例: git bisect
 http://git-scm.com/docs/git-bisect#_bisect_run
原文链接:http://note.youdao.com/noteshare?id=6614c88657195d90d44808c1ef31e6ad&sub=EDABD299B4E64713AD41AA09E77909D6
公众号:一只阿木木