假设在游戏中你正准备打boss,但是你又怕打不过,所以你使用了存档功能,一旦打不过你就读档重新打,这样你就相当于有了无数条命。在写代码时也是如此,假设你现在想为成品项目增加新功能, 你又怕乱改后原功能又不能用了,这时候你会选择复制一份再修改,改坏了不要紧,因为你有备份。Git就时用来帮助这种事的。
在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!
安装完成后,还需要最后一步设置自报家门,毕竟项目那么多人提交修改后要知道谁改的。
在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
创建代码仓库:
通过git init
命令把你的指定目录变成Git可以管理的仓库:
使用命令git add 文件名
,注意,可反复多次使用,添加多个文件到暂存区,此时还没真正修改;
使用命令git commit -m <修改简述>
,提交更改到仓库。
Git常用命令
使用git status
命令查看你的修改状态。
如果git status
告诉你有文件被修改过,用git diff
可以查看修改内容。
你每次提交到代码仓库Git都会生成一个版本号,便于你的回退,使用命令git reset --hard 回退版本号
。进行回退操作
用git log
可以查看提交历史,以及版本号等信息。
回退之后又想恢复到之前的版本,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。
撤销更改git checkout -- file
可以丢弃工作区的修改(工作区指的是你在目录里的修改)
当我们想放弃工作区的修改时候,不要使用git checkout – filename进行放弃修改,这种修改方式没有后悔药可以用(当然其实也是存在的,借助idea或在一些场景git也是可以找回,但是比较麻烦,因此为了不给自己挖坑最好不要用)。我们可以使用git stash放弃工作中的修改(stash含义是储存的意思),git stash就是把我们工作区中的修改先存储起来并恢复工作区的修改,此时也就是回到了方法1中的版本N-1,当后悔了想回到版本N时候,可以借助git stash apply 将存储的修改再次应用到工作区中。
如果你已经把修改git add到暂缓区了,此时你需要用git reset HEAD
来撤销。
命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容
我们使用 git clone <仓库> <目录>
从现有 Git 仓库中拷贝项目。
例:$ git clone git://github.com/schacon/grit.git
使用命令$ ssh-keygen -t rsa -C "[email protected]"
来创建ssh密钥。密钥在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。用记事本打开id_rsa.pub复制
添加到你的github
要关联一个远程库,使用命令git remote add origin 你的git地址
;
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
使用命令git pull origin master
获得最新修改
分支管理
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
查看分支:git branch
创建分支:git branch
切换分支:git switch
创建+切换分支:git switch -c
删除分支:git branch -d
合并某分支到当前分支:git merge
例:如果想把当前分支合并到主干
git switch master
切换到主干
git merge dev1
再进行合并