微软OneNote客户预览版学习工具下载(暂未上线):教学好帮手
842
2022-05-30
1. git流程图
clone方式创建本地仓库流程:
从远程仓库中克隆Git资源作为本地仓库:git clone https://github/git/example。
从本地仓库中checkout代码然后进行代码修改:直接修改代码文件等,该区称为工作区
在提交前先将代码提交到暂存区: git add -A将所有文件放到缓存区;git add filename1 filename2 ...,将指定文件放到缓存区 。
提交修改。提交到本地仓库:git commit -m "the first commit",提交所有文件到本地仓库,m参数必须有,意思是为本次提交添加说明信息。也可以和add一样,只提交某个文件
在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库:git push http://xxx/xxx。
当其他人也更新了远程仓库的代码,自己本地还未更新时,需要再从远程仓库更新自己的本地仓库,此时不需要用clone,可以用以下三种方式之一:
git fetch:从远程获取最新版本到本地
git merge:merge远程仓库和本地仓库
git pull:fetch+merge,从安全角度出发,git fetch比git pull更安全,因为我们可以先比较本地与远程的区别后,选择性的合并
更新本地仓库后,自己又进行了修改,可以再add、commit、push。如此循环反复。
创新全新的仓库:
在本地如D:/repository目录下面,新建一个repo1的文件夹(仓库名称叫做repo1),进入该文件夹,打开git bash,输入命令git init,执行后可以看到,在项目目录repo文件夹下多出了一个.git目录,关于版本等的所有信息都在这个目录里面。
新建文件,编辑,然后git add到缓冲区
git commit到本地仓库
git push到远程仓库
远程仓库更新后,pull或者fetch到本地
自己更新后再次add、commit、push
2. 文件的四种状态:
Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改!
Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
3. 分支的概念
我们每次的提交,Git都把它们串成一条时间线,这条时间线就是一个分支。分支就像科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!
git一般会有一个master主分支。开始的时候,master分支是一条线,Git用master指向最新的提交,然后用HEAD指向master,就能确定当前分支,以及当前分支的提交点。每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。
Git创建一个分支很快,因为除了增加一个dev指针,更改HEAD的指向,工作区的文件都没有任何变化!不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并。
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支。
两个分支中编辑的内容都是相互独立互不干扰的,那么如果在两个分支中都对同一个文件进行编辑,然后再合并,就有可能会出现冲突。冲突需要手动解决。
常见的分支命令:
# 列出所有本地分支 git branch # 列出所有远程分支 git branch -r # 列出本地和远程所有分支 git branch -a # 新建一个分支,但依然停留在当前分支 git branch [branch-name] # 新建一个分支,并切换到该分支 git checkout -b [branch] # 合并指定分支到当前分支 $ git merge [branch] # 删除本地分支 $ git branch -d [branch-name] # -d表示强制删除 # 删除远程分支 $ git branch -dr [remote/branch] $ git push origin --delete [branch-name] # 删除后还要推送到服务器 # 更改分支名称 git branch -M
4. 其他命令
查看filename的修改日志 :git log filename
删除filename:正确方式如下,如果本地电脑直接delete,只是本地(缓冲区删除),本地仓库仍然存在。
# 正确删除方式 git rm filename git commit -m "remove" # 如果本地delete删除,需要先add,再commit git add fileanme git commit fileanme -m "remove"
查看文件状态:git status filename
5. github使用
5.1 使用https方式推送到github
在github上申请一个账号
右上角点击加号,有New repository
从上图可以看到,github的使用有两种方式,HTTPS和SSH,切换一下,会发现下面的示例也会变化。实际当中两种方式都可以使用,如果使用https很简单,基本不需要配置就可以使用,但是每次提交代码和下载代码时都需要输入用户名和密码。如果使用ssh方式就需要客户端先生成一个密钥对,即一个公钥一个私钥。然后还需要把公钥放到github的服务器上。为了先了解如何使用github,此处我们先讲https的方式,此方式不用做任何配置,得到第2步的图片信息即可进入下一步。(ssh最后补充)
其实第2步的图片已经告诉我们接下来怎么办了,如果本地仓库已经建好(没建好,可以先git init创建本地仓库),此时需要建立本地仓库和远程仓库的连接,或者说是添加新的远程仓库:git remote add origin https://github.com/yuanhanly/myrepo.git。add就是创建连接的意思,origin是https://github.com/yuanhanly/myrepo.git的别名,一般都叫origin,也可以改叫别的。后面的地址就是github仓库的地址。
修改分支的名称为main(master时代已经过去了):git branch -M main
推送到远程服务器:git push -u origin main。origin远程仓库主机名,main分支名称,此时不需要写https的地址,用origin代替即可。将本地的main分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了,如果当前分支只有一个追踪分支,那么主机名都可以省略。 不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。
5.2 使用ssh方式推送到github
使用ssh方式,除了第3步需要配置一下,其余步骤基本和https相同,下面讲述配置ssh的方法(密钥的生成与设置只需要进行一次,不必每个仓库都设置):
在git bash下执行ssh-keygen -t rsa
执行命令完成后,在window本地用户.ssh目录C:\Users\用户名.ssh下面生成如下名称的公钥和私钥:id_rsa是私钥,id_rsa.pub是公钥
在github下,点击+旁边的按钮,选择Settings,然后切换到SSH and GPG keys
点击New SSH key,随便定义一个title,然后把id_rsa.pub中的内容复制,粘到Key下面,点击Add SSH key按钮完成配置
git remote add 的地址相应修改,如git remote add origin git@github.com:yuanhanly/myrepo.git
5.3 关于远程操作的其他相关命令
git remote -v:显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL,如下图,origin是远程仓库名称,后面是url,括号里面是方法
git remote show origin:查看origin远程仓库
git remote rename oldname newname:修改远程仓库名称,如origin改成aabb
Git GitHub
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。