常用的Git命令

106 阅读5分钟

推荐一个清晰明了的文档: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部署服务器。

欢迎大家来玩~~~