历史简介
略过
最基本的操作
git init
创建版本库,会产生一个.git
的隐藏目录,用来跟踪管理版本库git add
把文件添加到仓库git commit
把文件提交到仓库,-m
可以添加提交信息。commit
会将add
进仓库的文件全部提交到仓库。git status
其实感觉这个并不常用, 到那时这个可以看仓库的当前状态。git status
可以和git diff
命令配合使用,通过status
查看哪些文件被修改过还没有提交,通过diff
可以看修改了哪些内容。也可以通过git status
查看将被commit
命令将提交到仓库的文件。
工作区和暂存区
当前在编辑的就是工作区
add
命令提交到暂存区,commit
提交到当前本地仓库
修改管理
commit
是将暂存区内容提交到本地仓库,所以要提交当前修改,必须要先将修改内容add
到暂存区之后再commit
git checkout -- filename
可以将filename在工作区的修改撤销,但是如果已经添加到了暂存区,就只能恢复到暂存区的内容。git reset HEAD <filename>
就可以撤销暂存区的修改git reset HEAD
既可以回退版本,也可以将暂存区的修改回退到红作曲,用HEAD时表示使用最新版本。
远程仓库
- 配置好ssh等信息,然后新建一个仓库
- 本地仓库目录下运行
git remote add origin url
,这是一条本地关联远程库的命令,远程仓库名是origin,默认的这是,但是origin一看就是远程仓库。可以远程关联任意一个仓库,但是推送时需要自己的公钥在账户列表里。 git push -u origin master
这里就是将本地仓库内容推送到远程仓库。第一次加上-u参数,这样推送时不仅将内容推送上去,还将本地仓库和远程仓库关联起来,在以后的推送或者拉取时就可以简化命令,使用git push origin master
。- 删除远程库,使用
git remote rm <name>
这条命令来删除远程库,在此之前,可以使用git remote -v
来查看远程库的信息,然后根据名字删除。
分支管理
git用一个HEAD指针指向当前的工作分支,如果要切换工作分支,只需要改变head的指针,如果要合并分支,也只需要更改指针,所以操作就很快。
git branch dev
创建了一个dev分支git checkout dev
切换到dev分支- 以上两条命令可以使用
git checkout -b dev
这天命令来替代,创建并切换到分支dev git branch
产看分支,前面有*
的就是当前分支,所有的add,commit
都会提交到仓库的这个分支。git merge dev
将当前分支与dev
分支合并。git branch -d dev
将dev
分支删除。- 实际上也可以使用
git switch
来进行相关操作。git switch -c dev
创建并切换到dev分支。git switch master
切换到master分支。 - 上述的分支合并方式,其实会默认使用
Fast forward
模式,但是这种模式下删除分支后就会丢失掉分支信息。如果要强制禁用Fast forward
Git就会在merge
时生成一个新的commit
。 - 尝试之后,使用
git merge --no-ff -m "merge with no-ff"
这条命令提交来不使用Fast forward
我们可以用git log --graph --pretty=oneline --abbrev-commit
命令来看提交图,美化一下。
使用Fast forward
和不使用的两个图的对比:
就是这样。
bug/feature branch
暂时略 2021.04.07
冲突管理 和 多人协作
冲突管理
- 冲突太常见了,两个分支都有自己的提交,从
变成了
这时合并两个分支就很有可能会产生冲突,比如对同一个文件进行了修改。 merge
产生冲突,我们可以直接产看冲突文件的内容,也可以通过git status
产看冲突的文件- 冲突文件中用
<<<<<
,=====
,>>>>>>
来标记不同分支的内容,修改后保存在提交即可
多人协作
两个人都在本地创建了同一个分支,然后其中一个已经push到了远程仓库,而另一个也对文件进行了修改,并尝试进行远程推送,推送失败。
- 先用
git pull
将最细腻的提交从远程的同名分支抓下来,然后在本地合并解决冲突再推送。 git pull
可能也会失败,原因如果是如下:原因是没有指定本地dev
分支和远程origin/dev
分支的链接,可以使用git branch --set-upstream-to=origin/<branch> dev
命令来进行本地分支和远程分支的连接再进行推送。
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
- 当
git pull
成功后,在本地进行分支合并,合并会有冲突,手动解决完冲突后就可以push
了。
git stash
git stash可以在本地存一个快照,常用来解决pull冲突。
git stash
可以存一个快照git stash list
可以看当前有哪些快照git stash drop stash@{num}
可以删除快照git stash clean
清除所有快照(应该是有这条命令)git pop [stash@{num}]
恢复编号为num的快照,[]内容为可选内容。
其他常用操作
git log --graph --pretty=oneline --abbrev-commit
可以查看分支的提交历史git branch --set-upstream-to=origin/master master
设置本地分支和远程分支的对应关系````````````````