Git 的常用命令与配置

202 阅读7分钟

Git 的常用命令与配置

文章为本人在工作项目上所遇到的知识点的总结。

Git 学习与API地址

知识点概览


.git这个不算工作区,而是Git的版本库。

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

git add把文件添加进去,实际上就是把文件修改添加到暂存区;

git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

Git如何忽略需要push的文件目录

1、文件夹内右键git bash,输 touch .gitignore,注意中间有空格。

2、编辑器打开生成的 .gitignore 文件,加入:

/node_modules

/*
	以及其他你想要忽略的文件或文件夹;
	以斜杠“/”开头表示目录;
	以星号“*”通配多个字符;
	以问号“?”通配单个字符;
	以方括号“[]”包含单个字符的匹配列表;
	以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
*/

Git常用命令

命令说明
git status查看状态
git diff
git diff HEAD -- readme.txt
查看修改了什么内容
查看HEAD指向的分支最新的版本库和最新的工作区之间的差异
输入 q 退出
git log
git log --pretty=oneline
查看历史记录(简介信息)
git reset --hard HEAD^
$ git reset --hard HEAD~100
$ git reset --hard commit_id
1、回退到上一个版本。
2、回退到前100个版本。
3、回退到指定的版本id上
git reset --soft HEAD^回到上一个版本
不删除工作区改动的代码,撤销commit,不撤销git add .
git reset --mixed HEAD^回到上一个版本
不删除工作区改动的代码,撤销commit,撤销git add .
git reflog记录每一次的命令记录
git checkout -- file场景一:丢弃工作区的修改
场景二:误删了工作区的文件,那也可以达到恢复。原理其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
git reset HEAD file撤销暂缓区的修改
git rm file把工作区删除掉的文件,更新到版本库的暂缓区与git add相反,然后commit提交到HEAD,达到版本库和工作区同步
git branch查看分支,*号指向的分支为当前分支
git branch <name>创建分支
git checkout <name>切换分支
git checkout -b <name>创建+切换分支
git merge <name>
git merge --no-ff -m "" dev
合并某个分支到当前分支,合并有默认的Fast forward快速合并方式,也有--no-ff不同合并方式
git branch -d <name>
git branch -D
删除分支(未合并的分支删除会警告,不能删除)
强制删除分支
git log --graph查看分支合并图
git stash“储藏”当前工作现场,等以后恢复现场后继续工作
git stash apply <name>恢复储存的工作现场,恢复后,stash内容并不删除,可选
git stash drop <name>删除stash储存的内容,可选
git stash pop恢复的同时把stash内容也删了
git stash list查看stash的内容
git remote -v查看远程库信息
git push origin branch-name推送本地的branch-name分支到origin(前提已对接好origin的其中一个分支上)
git push origin feature-branch:feature-branch推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
git pull
git pull origin master --allow-unrelated-histories
抓取远程的最新包,并且试图合并本地当前的工作区,可能会行程冲突,需要手工解决
git remote add origin git@github.com:DesBisous/ng5-Admin.git本地建立远程仓库地址
git fetch
git checkout -b branch-name origin/branch-name
在本地创建和远程分支对应的分支
git branch --set-upstream branch-name origin/branch-name建立本地分支和远程分支的关联
git tap <name>
git tap <name> commit_id
新建一个标签,默认是HEAD
指定在特定的一次提交上进行打标签
git tag -a <tagname> -m "填写说明"可以指定标签信息
git tag查看所有标签
git show v0.9查看某个标签的详细信息
git tag -d <tagname>
git push origin :refs/tags/<tagname>
可以删除一个本地标签
可以删除一个远程标签(删除远程标签的前提是先要删除了本地的对应标签才行)
git push origin <tagname>推送一个本地标签到远程库
git push origin --tags可以推送全部未推送过的本地标签到远程库
git log --pretty=oneline 文件名查看某个文件的提交记录
git show <git提交版本号> <文件名>查看某次提交的某个文件的改动
git remote show origin可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息

工作中使用Git的场景和解决步骤

  • 场景一:修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

  • 场景二:当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

  • 场景三:当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

  • 场景四:并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

    • master分支是主分支,因此要时刻与远程同步;
    • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
    • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
    • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
  • 场景五:多人协作的工作模式通常是这样:

    • 首先,可以试图用git push origin branch-name推送自己的修改;
    • 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    • 如果合并有冲突,则解决冲突,并在本地提交;
    • 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
  • 场景六:克隆项目的时候一般为master分支,现需要获取远程origin/dev的做法:

    • git checkout -b dev origin dev -> -b dev 表示在本地新建一个叫 dev 的分支,与远程的 origin dev 对应

    • git checkout -t origin dev -> -t 参数默认会在本地建立一个和远程分支一样的名字的分支

      如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

  • 场景七:需要回滚到任意版本:

    • 先显示提交的log:git log -3
    • 回滚到指定的版本:git reset --hard e377f60e28c8b84158
    • 强制提交:git push -f origin master
  • 场景八:git远程删除分支后,本地git branch -a 依然能看到的解决办法:

    • 使用命令 git remote show origin,可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息
    • 此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用 git remote prune origin 命令,就可以更新本地远程分支的信息了
  • 场景九:删除上传后的node_modules文件

    • git rm -r --cached node_modules
    • git commit -m 'delete node_modules file'
    • git push origin master