Git的工作原理:
如何修改本地仓库地址:
1.打开git bash
2.cd 你想创建仓库的位置例如 cd F:\mygit_repo (名字中间有空格的如Program file写为Program” ”file)
3.使用 git init 命令
如何修改远程仓库地址:(待补充)
右键菜单中, Git Init Here直接在当前目录下创建一个代码仓库, Git Gui打开Gui的图形操作页面
配置属性:git config --global user.name “balabala” 配置用户名git config --global user.name 后面没接东西,显示用户名
生成SSH Key: ssh-****** -t rsa -C “[email protected]” ,会得到id_rsa和id_rsa.pub,复制id_rsa.pub中的内容到github的settings→SSH and GPG keys里,就完成了**的配置.
Git使用本地仓库之基本操作
创建本地仓库:cd到仓库的目录下,然后输入 git init,即可创建一个本地代码仓库。我们想删除代码仓库只需使用rm -rf 仓库名 命令,把这个文件夹删掉即可。
将文件添加到本地暂存区(原理图中的index):add命令git add 文件名 不需双引号,文件需已存在,文件名应带上后缀git ls-files 列出已被add的文件(已被commit进的也算)
添加与提交修改
提交修改:commit命令,将已add的东西全部commit进本地代码库
基本格式:git commit
提交时可以给本次提交加上一些声明:git commit -m “声明内容”
声明内容可以在以后的某一天想看的时候用git log命令调出来看,git log返回的内容包括版本号(那个长长的字符串),提交人的姓名和邮箱,提交时间,修改的内容,也即声明内容
做了一段时间工作的时候,想查看我们做了些什么改动:git diff命令,查看现有文件与暂存区中文件的差别(而不是与commit了的文件做比较),命令返回的文本中,红色-对应的是被删除了部分,绿色+对应的是新添加的部分。git diff branch1 branch2 --stat //显示出所有有差异的文件列表git diff branch1 branch2 文件名(带路径) //显示指定文件的详细差异git diff branch1 branch2 //显示出所有有差异的文件的详细差异
撤销(文档写错一不小心按了Ctrl+S):
文档尚未add的情况:可以先用git diff看一下改了哪些东西,可以手动回去改回来,也可以直接git checkout 文件名,就能一键把文档恢复成前一个add的版本啦!
如果一不小心add了:checkout无效,要先取消添加才能撤回提交:git reset HEAD 文件名git checkout 文件名
再一不小心commit了:只能回退版本了:git reset --hard HEAD
在Git中,用HEAD代表当前版本,上一个版本就是HEAD^,再上一个版本就是HEAD^^,依此类推。HEAD也可以替换成版本号,版本号通过git log获取。实际使用时,一般版本号只输入前7位就不会出现重复的情况了,可以不输入那么多位。
回退后,你突然后悔了,想回退回新的那个版本,可是遗憾的是,你键入git log却发现没有了最新的那个版本号:还有办法,git reflog命令可以看到之前输入的每一条指令,以及执行指令时对应的版本号(前7位)
还原某个特定的文件到之前的版本:git checkout 版本号 文件名
(先放这里,后面再看看会不会用到)当然如果你可以add多个文件后再一次性commit,不过如果我们改动的文件很多的话,我们可以git add .一次添加全部,但有一些是几百年都不变一次的又或者自动生成的,比如lib,gen,bin文件夹等等,我们可以在代码仓库的根目录下创建一个名为.gitignore的文件,然后编辑里面的内容,把不需提交的文件忽略掉!
接着输入要提交时忽略的文件内容即可!
分支
创建分支:git branch 分支名
分支间的切换:git checkout 分支名,切换后文件的内容即被改变git checkout -b dev 创建分支dev并切换到dev,此语句相当于 git branch dev加git checkout dev
查看所有分支:git branch 当前分支的前面有*标示
合并分支:git merge 分支名 将某一分支A合并到当前分支上,实际上是当前分支点移到了A点(注:如果在不同的分支中都修改了同一个文件的同一部分,Git 就无法干净地把两者合到一起)。
出现冲突:两个分支由于工作内容不同,或者是两个开发者后来改了什么东西,文件内容出现冲突是很正常的事情。在出现冲突时,冲突的文件将会被写入类似下面的信息:
该信息指出,当前分支(HEAD)在与dev-object-jw2005的分支合并的过程中出现了冲突,箭头往左表示冲突开始,也即“<<<HEAD”上面的部分没有冲突;箭头往右表示冲突结束,也即“>>>dev…”下面的部分没有冲突;中间就是冲突的部分了,从<<到====的部分是上分支的内容,从>>到====的部分是下分支的内容。可以看到,这次冲突中,HEAD的内容为空(或者说是两个空行),dev分支则是多了四行语句,那这次只需要将四行代码放进来,即可解决这个冲突。
删除分支:git branch -d 分支名
分支合并时出现merge conflict等可以看这个:Git-分支-分支的新建与合并
远程仓库的搭建与同步
新建立一个远程仓库之后,首先要把本地与这个仓库联系起来:git remote add origin address, address指远程仓库的ssh地址,这样就把该仓库与我们本地的origin标号联系了起来,可以认为origin就是那个远程仓库的引用,以后push和pull就不需要输入一长串的ssh地址了,用origin替代就可以了。
本地仓库与远程仓库同步:
从远程仓库下载:git clone url_repository aaa,注意到clone下来的东西是在当前目录下新建了一个文件夹,名字为aaa(一般不需要加aaa,此时文件夹名称将为github项目的名称),该文件夹包含该项目所有分支的文件信息,并以其中某一个分支的信息呈现出来(一般为master分支),但这并不是说就只clone了一个分支的内容,我们是可以通过checkout跳到其他分支的。也就是说,要clone一整个项目,只需一次clone即可,而不是说有几个分支就要clone几次,那样会累死人的。后面加上参数 -b 远程仓库分支名 或 commit版本号 [本地文件夹名],相当于clone下来之后又执行了一次checkout到我们所指定的分支或版本。clone是指本地仓库没有这个东西时,“无中生有”,复制下来一套完整的文件。之后就不再进行clone了(也无法再进行clone了,不能clone到非空的目录),后面要用pull来更新文件的版本。
从远程仓库同步到本地:git pull
从本地仓库同步到远程仓库:git push origin master 或者直接 git push.
给远程仓库建立一个新分支:先在本地git branch dev生成一个新分支,把东西commit进这个分支的仓库之后,再git push origin dev就可以了。
在进行pull和push的时候需要指定本地分支与远程分支的映射关系,否则会报no tracking information错误或者has no upstream branch错误,详情请看:https://blog.csdn.net/tterminator/article/details/78108550git branch -u aaa将当前本地分支与远程分支aaa建立映射关系(此时无需指定URL)git branch --unset-upstream 解除当前本地分支与远程分支的映射关系
Git之使用GitHub搭建远程仓库
与他人一起在github上做项目:如何加入别人的Git项目——Git Fork指南
使用在线编辑器Jupyter:在cmd中输入 jupyter notebook,会弹出一个窗口。
Github忘记密码怎么办
疑难解答
- Q:git pull时出现错误refusing to merge unrelated histories,无法pull
A:这是因为远程仓库origin上的分支master和本地分支master被Git认为是不同的仓库,所以不能直接合并。要合并两个不同的项目,git需要添加一句代码,在git pull,这句代码是在git 2.9.2版本发生的,最新的版本需要添加–allow-unrelated-histories。假如我们的源是origin,分支是master,那么我们 需要这样写git pull origin master --allow-unrelated-histories需要知道,我们的源可以是本地的路径