Git是目前世界上最先进的分布式版本控制系统
以下目录顺序不代表操作顺序 !
安装git
不多说了,去官网下安装包安装
创建版本库
如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
终端进入想要创建git版本库的文件夹
git init
会生成一个.git
隐藏文件夹,初始化完成
远程仓库
git remote add origin {git@github.com:example/example.git}
拉取代码
第一次拉取使用
使用ssh和https都是一样的,但是https需要输入用户名密码,ssh只需要绑定过秘钥即可
git clone {git@github.com:example/example.git}
以后再更新代码使用
git pull
执行git pull时,其实相当于执行了git fetch和git merge
git pull --rebase
执行git pull --rebase时,相当于执行了git fetch和git rebase
rebase和merge的区别后面再说
分支
基于当前分支创建一个新的分支
git branch {branchname}
切换到指定分支
git checkout {branchname}
也可以使用git checkout -b {branchname},创建分支并切换到它
查看所有分支,包括远程的
git branch -a
强制删除本地分支
git branch -D {branchname}
删除远程分支
git push origin --delete {branchname}
版本回退
退回上一个版本
git reset --hard HEAD^
注意:Windows下使用终端会需要使用
^
结束,即git reset --hard HEAD^^
退回若干个版本
git reset --hard HEAD~{num}
退回到指定版本
# 查看版本信息
git log
# 可以看到这样的信息,就是你的提交历史,键盘u是上一页,d是下一页,q可以退出该界面
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 21:03:36 2018 +0800
add distributed
commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Fri May 18 20:59:18 2018 +0800
wrote a readme file
# 退回到指定版本
# 版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
git reset --hard eaadf4
撤销上次commit,注意是回到上次commit之前的状态,如果上次commit已经push到远程,会导致版本不一致
git reset --soft HEAD^
windows同样是
git reset --soft HEAD^^
撤销add操作,注意只是撤销add本次的修改部分,并不是撤销add整个文件
git reset HEAD
所有
git reset HEAD {全路径}
指定文件
暂存区
1.将本地修改保存到暂存区,注意只有add过后的编辑内容会进入暂存区
stash和栈的存储顺序一样,先进后出
stash之后本地的工作区就是干净的
git stash
2.取出最近的一次stash的内容
git stash apply
3.删除最近一次stash的内容
git stash drop
4.取出最近的一次stash的内容,如果没有冲突就删除stash的内容
git stash pop
5.查看stash列表
git stash list
6.清除所有stash的内容
git stash clear
提交
# 状态
# 可以看到当前版本库的状态,包括有哪些文件还未提交等
git status
# 将文件交给版本库管理
git add 文件全路径 # add指定文件
git add . # add当前文件夹下所有未被版本库管理的文件
# commit操作
# 将add之后的所有变更进行一次提交,
git commit -m ""
# 将本地仓库推送到远程,注意本地和远程有冲突会失败
git push
# 强制推送,用本地的版本覆盖远程,会把别人的代码覆盖掉,最后仅在自己的分支可以使用
git push -f
# 远程分支覆盖本地(三步)
git fetch --all
git reset --hard
git pull
实际项目的提交流程
All Roads Lead to Rome
条条大路通罗马
处理冲突提交方式有多种,这里只介绍博主喜欢的一种
单分支开发
如果是多个人在一条分支上开发
git status
查看状态
git add .
添加需要管理的内容
git stash
将内容暂时存储起来
git pull
更新代码
由于本地修改已经被存储起来,所以目前本地版本树和远程是一致的,不会有任何冲突
git stash pop
将存储的内容还原回来,并删除存储的内容
此时可能会有冲突,如果有冲突,stash的内容是不会被删除的,可以放心
解决冲突
git add .
git commit -m ""
git push
多分支开发
如果是多个人在自己分支上开发,并合并到主分支
假设主分支叫develop
,自己的分支叫rome
在rome分支开发完成之后
git status
git add .
git stash
git checkout develop
git pull
git checkout rome
git rebase develop
git stash pop
此时可能会有冲突,解决冲突
git status
git add .
git commit -m ""
git push
如果通过一些版本回退的命令,导致本地代码和远程不一致,
但是本地的代码同时确定是基于develop的最新代码,可以使用
git push -f
覆盖自己远程分支的代码
rebase 和 merge
从意义上来考虑
rebase
当前在rome分支
git rebase develop 应该是在让自己分支独有的提交重新基于主分支的代码
merge
当前在develop分支
git rebase rome 让rome的分支的提交合并到主分支来
详细解析
有空再写