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 diffgit diff HEAD -- readme.txt | 查看修改了什么内容 查看HEAD指向的分支最新的版本库和最新的工作区之间的差异 输入 q 退出 |
git loggit 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 pullgit pull origin master --allow-unrelated-histories | 抓取远程的最新包,并且试图合并本地当前的工作区,可能会行程冲突,需要手工解决 |
git remote add origin git@github.com:DesBisous/ng5-Admin.git | 本地建立远程仓库地址 |
git fetchgit 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