git入门笔记
Git 来源
Git是分布式版本管理系统,早期是因为Linus为了维护Linux社区的各种版本而开发的软件。
分布式的好处就是在每个人的计算机中都有一个完整的模板库
官网安装https://git-scm.com/downloads
清华镜像https://mirrors.tuna.tsinghua.edu.cn/github-release/git-for-windows/git/
然后输入以下命令
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
新建仓库
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
git init
添加文件git add <file>
提交到仓库git commit -m <massage>
如果想要修改git commit
时的默认编辑器可以
git config --global core.editor notepad++
时光穿梭机
查看仓库状态git status
查看修改git diff
查看历史版本git log
精简为一行查看历史版本git log --pretty=oneline
每一个版本都有一个commit id
(版本号)
Git用HEAD
表示最先的版本,上一个版本是HEAD^
,上上一个版本是HEAD^^
,以此类推。往上100个版本可以写作HEAD~100
回到上个版本git reset --hard HEAD^
也可以用git reset --hard <commit id>
来实现版本跳跃,既可以向前也可以先后,版本号不必写全,写几个就行,但写太短如果重复就会出问题
git reflog
记录了每一次命令
工作区和版本库
我们所能看到的界面仓库界面就是工作区
在工作区中还有个隐藏目录.git
,里面存放了我们各个版本的文件
Git为我们创建了一门默认分支master
和一个指针HEAD
,不同的版本切换实际是指针在移动,所以时间效率很高
我们在向版本库中提交是分为了两步
git add
这一步是将当前的文件修改添加到暂存区git commit
这一步是将暂存区的提交到当前分支
和其他版本控制软件相比Git储存的版本库是储存修改而不是文件
第一次修改 > git add
> 第二次修改 > git master
这样在我们的版本库中只会存放第一次修改,因为第二次修改没有被加入的暂存区中
第一次修改 > git add
> 第二次修改 > git add
> git master
这样在版本库中我们就可以看到一个文件的两次修改
git status
就可以查看当前暂存区中的修改情况
撤销修改
git checkout -- <fail>
可以文件fail
的修改全部删除,这里分为两种情况
fail
自修改后还没有被加入暂存区,此时撤销就和版本库的最新版本相同fail
已经添加到暂存区中又做了修改,此时的撤销就是回到最后一次添加到暂存区后的状态
如果既想撤销工作区的修改,并且清空暂存区可以用git reset HEAD <file>
可以回到版本库中的最新状态
删除文件
如果再工作区删除一个文件,如果我们确实要删除该文件,那么可以用git rm <fail>
是在版本库中删除文件
如果误删了文件,但版本库中还有可以用gti checkout -- <fail>
,git checkout
命令实际是用版本库中的最新版本替换当前版本
创建远程库
按着教程走就行
首先创建ssh
ssh-keygen -t rsa -C "youremail@example.com"
在用户的主目录中找到.ssh
目录,其中id_rsa
是私钥,id_rsa.pub
是公钥,在远程仓库中加入公钥即可
如果要关联远程库,使用命令git remote add origin git@server-name:path/repo-name.git
在关联库时要给库起一个名字origin
是默认的名字
如果要把本地库提交到远程库用命令git push origin master
在第一使用时git push -u origin master
这要就把本地库与远程库的分支关联起来,以后可以简化命令
从远程库克隆
刚才说的都是现有本地库,在推送到远程库上,实际中我们一般是先创建远程库在从远程库上克隆
但我们在网上创建好仓库后可以用
git clone <仓库地址>
这样就出来一个文件夹,是我们从远程库clone的一个仓库
分支管理
创建分支
在git
中master
是主分支,有时候我们需要分别开发多个功能是可以创建多个分支在各自的分支完成后,在合并到一个分子中
git checkout -d dev
这里加上-d
表示创建并切换,相当于以下两句话
git branch dev
git checkout dev
可以用git branch
查看当前的分支情况,前面有*
代表当前分支
在dev
分支的操作并不会对master
产生影响,分支操作完成后合并分支
git merge dev
删除分支,git branch -d dev
这样就可以删除这个分支
在新版本的git中新增了一给switch
命令可以来切换分支,可以防止和撤回的checkout
混淆
创建并切换到新分支可以
git switch -c dev
切换分支可以用
git switch dev
解决冲突
如果在两个分支同一个文件都做的修改,在合并时就会出现冲突
git会用<<<<<<<
、=======
、>>>>>>>
,我们要打开文件手动消除冲突然后重新提交一次
分支管理策略
之前我们的合并时快速合并,合并后如果删除分支就看不到该分支的合并记录,但是可以用普通合并的方法保留这个合并的过程
就是在合并时用
git merge --no-ff dev