推荐一个清晰明了的文档:Git 基本操作 | 菜鸟教程
一:Git命令
1、获取代码
git clone url LocalPath // url为git地址,LocalPath是代码要存在本机的位置
举例:
git clone https://github.com/SunQQQ/SunQBlog-UserSide D://code/SunQBlog-UserSide
2、更新本地代码:
git pull
3、提交本地代码:
$ git commit -m 提交的描述信息
$ git push
4、合并分支
git branch -a // 展示所有分支
q // 退出分支列表
git checkout 某分支 // 切换到某个分支
git merge 以上某一个分支 // 将某分支合并到本分支
git push
5、git add . 和 git add * 区别
- git add . 会把本地所有untrack的文件都加入暂存区,并且会根据.gitignore做过滤,
- 但是git add * 会忽略.gitignore把任何文件都加入
6、暂存代码
拉取代码有冲突时,需要先把改动暂存,再拉下代码,处理冲突。然后add、commit、push
git stash save 备注信息 // 暂存修改
git pull // 拉取代码
git stash pop // 恢复暂存的修改 这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下。
7、回退版本
git reset 命令用于回退版本,可以指定退回某一次提交的版本。git reset 命令语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
git reset [HEAD]
// 实例:
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
git reset --hard HEAD
// 实例:
$ git reset –hard HEAD~3 # 回退上上上一个版本
$ git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样
注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。
8、删除/拉取分支
如果本地分支代码害怕有问题,那么删除该分支在本地代码后,从新拉取。以master为例
1、先切到别的分支,再git branch -d master,如果本地分支跟服务器不同需要-D
2、git checkout -b master origin/master // 拉取分支
9、提交记录
gitk
该命令会打开一个git自带的历史记录可视化工具,比我们从浏览器里再打开页面看提交记录更方便一些
10、设置提交人名称
git config user.name // 查询当前的提交人姓名
git config --global user.name sunquan // 把提交人姓名设置为sunquan
二:合并分支实操
大多时候公司都是分工合作,可能一人一个分支,各自在自己的分支上开发,然后开发完毕后合并到主分支(master)上线。这时就需要在master上将你的分支合并过来,有时别人分支如果也合并到master了,就需要你先在你的分支上把master上最新的代码合并到你的分支上,然后push;再去master上把你的分支合并过来,然后push。记着push,合并只是合并到本地了。
比如我们现在在dev分支上,想将dev分支合并到master分支,操作如下:
1、确认当前分支
git branch -a // 展示所有分支,高亮的为当前分支
2、首先切换到master分支上
git checkout master
3、如果是多人开发的话 需要把远程master上的代码pull下来
//如果是自己一个开发就没有必要了,为了保险期间还是pull
git pull origin master
4、然后我们把dev分支的代码合并到master上
git merge dev
5、然后查看状态及执行提交命令
git status
On branch master
Your branch is ahead of 'origin/master' by 12 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
//上面的意思就是你有12个commit,需要push到远程master上
6、最后执行提交命令
git push origin master
三:git不能先commit后再pull
今天遇到一个在使用git上的一个误区。具体的问题现象是:
我commit后再pull而不能在本地合并的情况,结果导致我的commit直接把同事的修改覆盖了。因为相对于我此次的commit的A版本是同事的提交的B版本的上一个C版本,我直接是对C版本进行的修改,就是因为我没有先把同事的B版本先pull下来在本地产生一个最新的版本的合并。
我一直都是先commit后再pull,这样能“避免”冲突,事实上这样肯定不行,这样会导致你的commit不是基于最新的版本来进行的,而是上一个版本,这其中有其他的提交而在服务器上产生了最新的版本。而这样避免冲突的方式是错误的,更像是躲开了冲突。正确的操作是先pull下来,再添加,然后冲突解决,然后提交推送.
下面有一个简单的图示:
四:.gitignore添加无效
有一些包含密码的文件我们不想上传git,这时大家都知道把文件路径添加到.gitignore中即可。
但是我在我的老项目中,尝试了几次都不起效果。原来是如果某些文件已经被纳入了版本管理中,在.gitignore中再声明也是不起作用的。
解决方法: git清除本地缓存(改变成未track状态),然后再提交:
1、git rm -r --cached .
2、将不需要上传git的文件添加到.gitignore
3、将所有文件再add commit push上去
五:实践
1、SSL报错
克隆代码时,正常会自动弹框,要求我们输入git的账号密码。如果不弹出,且git报错如下
SSL certificate problem: self signed certificate
需要如下设置即可
git config --global http.sslVerify false
2、代码维护
我自己写了个个人网站:CodingLife
前端后端都自己来,自己创建、上传、维护git,自己使用ftp部署服务器。
欢迎大家来玩~~~