git快速入门
一个很好的git实践学习入门网站
总体来说过一遍这个网站就有了基本的框架,然后就可以在实践中边用边学了,学习的原则就是:多用多查多积累。
基本配置
git init
初始化本地仓库
git config --global user.name "XingMing"
git config --global user.email "xxxxx@gmail.com"
配置用户名和邮箱
本地仓库操作
-
git add [file]
将文件添加到暂存区。
-
git commit -m 'information'
提交到本地仓库
-
git branch <分支*>
在当前提交上创建新分支<分支*>
-
git checkout <分支*> git checkout -b <分支*>
切换到<分支*>
创建并切换到<分支*>
git checkout git checkout -- <file>
用暂存区(本地仓库)全部或指定的文件替换工作区(当前目录)的文件
-
git merge <分支*>
将<分支*>合并到当前分支上
-
git rebase <分支*> git rebase <分支*> <分支>
将当前分支移到<分支*>上
将<分支>移到<分支*>上
-
HEAD指针指向分支指针,分支指针指向最新提交。HEAD->分支指针->最新提交
-
相对引用^:HEAD^表示HEAD的上一次提交,git checkout HEAD^表示移动到HEAD所指分支的上一个提交
-
git branch -f <分支\*> <HEAD~2>
将<分支*>移动到<HEAD>的前两级提交
-
git reset <HEAD~1>
将当前分支在本地回退到上一次提交
-
git revert <HEAD~1>
将当前分支在新的提交上回退到上一次提交的状态(即图中C2’=C1,可以push到远程)
![image-20220314104827989](https://img-blog.csdnimg.cn/img_convert/d47311e6b6009955d5cbf48570cf0e6a.png)
-
git cherry-pick <commit1 commit2 commit3 ...>
将提交1、提交2、提交3移动(复制)到当前提交下
-
git rebase -i <HEAD~3>
用交互式rebase编辑当前分支的前3次提交,可以移动和删除其中的提交记录
-
git tag <v0> <C1>
在提交记录C1打上标签v0
-
git describe <ref>
描述离<ref>(缺省时为HEAD)最近的标签
输出的结果是这样的:
<tag>_<numCommits>_g<hash>
tag
表示的是离ref
最近的标签,numCommits
是表示这个ref
与tag
相差有多少个提交记录,hash
表示的是你所给定的ref
所表示的提交记录哈希值的前几位。
密钥配置
在git bash中输入:
ssh-keygen -t rsa -C "email address"
执行命令生成ssh key,选择保存的位置,设置密码(回车默认)
默认会在用户文件夹下创建.ssh文件夹,里面有2个文件id_rsa和id_rsa.pub,其中本机ssh密钥就在id_rsa.pub中。
随后在github或者gitee中的设置里面把上面的id_rsa.pub中的内容添加到SSH就行。
远程仓库操作
-
git clone
将远程仓库克隆到本地
-
git fetch git fetch origin <place> git fetch origin <source>:<destination>
将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态,但不会改变本地仓库的状态。它不会更新你的
main
分支,也不会修改你磁盘上的文件。第二第三行git指令与下面的push类似,只不过方向相反。
-
git fetch; git merge o/main
先将远程仓库的最新内容更新到本地仓库,再合并分支
-
git pull git pull --rebase
效果等于上面git fetch + git merge,拉取最新状态到本地并合并分支
如果加上–rebase后缀的话,效果等于git fetch + git rebase,拉取最新状态到本地并将当前分支移到最新的远程分支下
-
git push git push origin <place> git push origin <source>:<destination>
将本地推送到远程仓库,若远程仓库状态已更新(多人协作时),则会push失败。通常解决方法是先使用git pull或者git pull --rebase拉取更新本地后再push推送
<place>可以指定push哪个分支
<source>:<destination>可以指定本地哪个分支push到远程哪个分支,若目的分支<destination>不存在,则自动创建远程分支。当<source>缺省时,则会删掉远程<destination>分支
-
Remote Rejected远程服务器拒绝。
! [远程服务器拒绝] main -> main (TF402455: 不允许推送(push)这个分支; 你必须使用pull request来更新这个分支.)
通常情况下,我们应在在本地创建一个新的分支,然后再push分支到远程仓库
-
git checkout -b foo o/main git branch -u o/main foo #若当前在foo分支上,可以不用加foo
上面两句都是同样的效果,创建(检出)一个名为foo的新分支并让其跟踪远程仓库的main,在下次pull的时候由foo跟踪远程仓库的main的位置,使用foo分支commit后在下次push的时候同样会更新远程仓库的main的位置
名词解释
-
origin
远程仓库链接的别名。
origin等价于https://github.com/user1/repository.git
-
fork
将当前(别人的远程仓库)复制一份到自己的github账户上,成为自己的远程仓库
后续可以进行clone和push
-
pull request
在fork别人的项目并做了修改完善后,可以对原作者发起一个pull request,请求他pull我们更新完后的仓库状态。