git常用命令总结

1,404 阅读7分钟

拉取代码

拉取master主支代码

git clone https://github.com/JustDoIt521/web-Tetris.git   

拉取指定分支代码

我们假设拉取test分支的代码

git clone -b test https://github.com/JustDoIt521/web-Tetris.git

拉取远程分支并合并到当前分支

git pull origin test

拉取远程分支 并切换到该分支(不于当前分支合并)

方法1

git checkout -b 本地分支名 origin/远程分支名

方法2

git checkout --track origin/远程分支名 (这种写法是上面的简化版,效果完全一样)

方法3

git checkout -t origin/test   (方法2简化版)

查看及切换分支

查看当前分支

git branch  // 显示本地的所有分支  *代表当前分支
git branch -a  //  查看所有分支 包含本地和远程仓库分支

切换指定分支

如果切换到已有分支dev

git checkout dev

如果没有分支,我们想新建一个分支dev1并切换至该分支

git branch dev1
git checkout dev1

// 可以将上面两行简写为如下方式
git checkout -b dev1

切换到远程分支

假设我们在控制台输入 git branch -a 结果如下

  h18_ticket
* master
  remotes/origin/dev
  remotes/origin/tools

我们想切换至远程分支tools, 该方法也适合拉取远程分支代码

git checkout -b  tools  origin/tools 
该命令会建立一个本地仓库tools 和远程仓库tools的映射关系。并将远程仓库tools分支的代码拉到本地tools分支。
当然我们可以将本地分支明明为其他任何你喜欢的名字,只要不和本地已有分支的名字冲突
建议是保持本地分支和远程分支的名字一致,防止混乱
如果我们想查看下本地分支和远程分支的对应关系
git branch -vv   // 列出本地分支 和其所对应的远程分支

提交代码

提交到主支

git init // 初始化  生成git目录
git add -A // 添加本次修改的所有代码
git commit -m '第一次提交'  // 填写本次提交的信息
git push // 将代码提交至远程仓库

提交到对应分支

假设我们现在在test分支下开发,我们要将代码push到test分支对应的远端仓库

.....
git push origin test

提交指定文件

假设我们只想提交README.md文件的修改

git add README.md

提交某一类文件

// 将src目录下所有的*.vue文件的修改添加到暂存区
git add src/*.vue
// 将以dialog结尾的文件的所有修改添加到暂存区
git add *dialog 

删除分支

删除本地分支

我们首先要切换至其他分支

git branch -d dev  // 删除本地dev分支

删除远程分支

git push orgin --delete deb // 删除远程仓库分支 dev

合并分支

假设我们将dev分支的代码合并到master分支

git checkout master  // 首先切换到master分支
git merge dev // 合并dev分支的修改

暂存修改

git stash  // 暂存本次修改的所有内容
git stash pop  //使用上一次暂存,并将这个暂存删除,使用该命令后,如果有冲突,终端会显示,如果有冲突需要先解决冲突(这就避免了冲突提交服务器,将冲突留在本地,然后解决)
git stash list // 查看所有暂存
git stash clear // 清除所有暂存

设置忽略

创建名为.gitignore的文件在项目根目录下

要忽略文件未被纳入版本管理

node_modlues  //忽略根目录下node_modules下的所有文件

要忽略的文件被纳入版本管理了

比如我们想忽略temp.js

// 移除对temp.js的跟踪。 本地的temp.js并不会被删除
git rm --cached temp.js 
// 执行提交代码的操作
git init
...
git push 

//  本地的temp.js并不会被删除,但是当我们登录远程仓库的时候,远程仓库的temp.js已经被删除掉了。  如果我们之后再移除对temp.js的忽略,再次提交,git就会重新跟踪temp.js

比较差异

查看本次修改的文件

git status

// 显示结果
On branch game   // 所在的分支
Your branch is up to date with 'origin/game'.

Changes to be committed:
 (use "git restore --staged <file>..." to unstage)
modified:   src/components/avatar.vue    // 所修改的文件

显示文件内被修改的内容

git diff  // 默认比较工作区与暂存区的修改
git diff HEAD // 比较工作区和最新本地版本库

如果我们在执行diff操作之前运行了git add -A,则diff不会显示有任何差异,因为此时工作区和暂存区是一样的。
此时如果要查看差异 可以用

git  diff --cached // 比较暂存区与最新本地版本库(本地库中最近一次commit的内容)

以上方法均可以加path参数显示指定文件的修改

例如我们想比较src/component/index.vue的文件差异

git diff src/component/index.vue
git diff HEAD src/component/index.vue
git diff --cached src/compoent/index.vue

退出git

按 Esc 键退出编辑模式,英文模式下输入 :wq ,然后回车(write and quit)。

按 Esc 键退出编辑模式,大写英文模式下输入 ZZ ,然后回车

Ctrl + c

打标签

查看所有标签

git tag

创建标签

git tag -a v1.0.0  // 该命令会创建一个名为 v1.0.0的标签,并且git会打开你的编辑器,
让你为这个标签添加注解(如下图)。

git tag -a v1.0.0 -m "first use tag"
// 可以直接添加注释,不需要打开编辑器

推送标签

git push origin --tags // 推送本地所有标签
git push origin v1.0.0  // 推送名为v1.0.0的标签

切换到指定标签

git checkout v1.0.0  //切换到v1.0.0的标签下

删除本地标签

git tag -d v1.0.0 // 删除标签v1.0.0

注意

推送成功后 我们可以在gitlab上通过点击指定标签 看到 对应的压缩包文件

解决冲突

比如我们现在有一个名为testDemo的分支,其中baseApp.js有这样一行代码

console.warn('branch testDemo');

而我们在master分支下 同样baseApp.js下有这样一行代码

console.warn('branch master');

当我们想合并testDemo分支的时候,由于两者都修改了同一个文件,因此会产生冲突。但是不要担心,在执行merge操作的时候,git会给我们标明错误文件和冲突位置。如下图

如果使用vscode,current Change代表当前分支下修改,incoming Change代表要合并的分支的修改。 我们可以通过选择accept来解决冲突,选择用哪个分支下的代码,也可以自己修改。

之后 我们需要将修改内容暂存到本地

git  add baseApp.js
git commit -m '我选择master分支' // 为解决本次冲突提供注释

注意

如果是pull时候产生的冲突,我们可以先暂存本地修改

git stash

然后再拉取代码后,

git stash pop

之后解决冲突方式和前面一样。

多人协作时更新

git pull

(我用的不是很多,后面有新的体会再更新,也欢迎大佬补充)

查看日志

git log // 列出详细日志

git log --oneline  // 简化日志

版本回退

通过log命令 我们可以看到历次提交记录,以及对应的 id。 就是commit后面那个,假设我们想要退回的版本id为f45ae0d30ae0045eda526fd2f6daade59f974c2

git reset --hard f45ae0d30ae0045eda526fd2f6daade59f974c2 

git push -f -u origin master // 推送到远程服务器

Ps: 其实可以只写id前面的几个字符, 比如上面的f45ae0d即可。 当然字符不可以太短,git会查到很多版本号,就无法确定哪一个。

如果我们只是想退回到上个版本

git reset --hard HEAD^

我们可以一直执行该命令,版本会按照记录,依次往后退。

版本回退后更新

版本回退后更新我们需要使用force命令

git push --force