1.git全局设置
git config --global user.name "Your Name" git config --global user.email "email@example.com"
2.创建版本库
初始化一个Git仓库,使用 git init
命令。
添加文件到Git仓库,分两步:
-
第一步,使用命令
git add <file>
,注意,可反复多次使用,添加多个文件; -
第二步,使用命令
git commit
,完成。
3.版本控制
-
HEAD
指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。 -
穿梭前,用
git log
可以查看提交历史,以便确定要回退到哪个版本。 -
要重返未来,用
git reflog
查看命令历史,以便确定要回到未来的哪个版本。 -
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file
。场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD file
,就回到了场景1,第二步按场景1操作。场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本控制第一步,不过前提是没有推送到远程库。
4.远程仓库
生成ssh密钥
ssh-keygen -t rsa -C "youremail@example.com"
在远程仓库如github-帐户设置-ssh公钥管理-添加自己的公钥(默认生成在C:UsersAdministrator.ssh,id_rsa是私钥,id_rsa.pub是公钥)
在本地仓库下:
git remote add origin git@github.com:cloudebug/gitest.git
origin:远程库的名字,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程
git@github.com:远程仓库地址,Git支持多种协议,包括https
,但通过ssh
支持的原生git
协议速度最快。
cloudebug/gitest.git:用户名/仓库名.git
下一步,就可以把本地库的所有内容推送到远程库上:
git push -u origin master
把本地库的内容推送到远程,用 git push
命令,实际上是把当前分支master
推送到远程。
由于远程库是空的,我们第一次推送master
分支时,加上了 -u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。(第一次推送,如果远程不空,如有README.md,将会报错“Non-fast-forward”)
5.克隆远程仓库
git clone git@github.com:cloudebug/cloudebug.git
6.分支
查看分支: git branch
创建分支: git branch <name>
切换分支: git checkout <name>
创建+切换分支: git checkout -b <name>
合并某分支到当前分支: git merge <name>
删除分支: git branch -d <name>
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交。用 git log --graph --pretty=oneline --abbrev-commit 命令可以看到分支合并图。
--graph:查看分支合并图
--pretty=oneline:--pretty 是使用其他格式显示,可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。 限制输出长度。
--abbrev-commit:截断提交号,只显示前几位
出错:
1.Non-fast-forward
出现原因:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式:
1,强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容
git push -f
2,先把git的东西fetch到你本地然后merge后再push
git fetch
git merge
这2句命令等价于
git pull