git常用操作
-
git中的三类文件
- 被追踪的(tracked):已经加入文档库
- 不被追踪的(untracked):没有加入文档库
- 忽略的(ignored):忽略那些不需要管理的文件夹或文件
1.创建仓库
- 创建仓库:
git init <reponame>
- 现有 Git 仓库中拷贝项目:
git clone <repo> <directory>
repo:Git 仓库。 directory:本地目录。 - 从远程代码库拉取指定分支的代码:
git clone -b v2.8.1 https://xxx.git
(-b 分支名称)
2.分支管理
在大型合作团队中,我们可以每天新建一个分支,这个分支就用来给大家提交合并代码, 等到晚上大家都合并完了,再把这个分支和maste分支合并
- 创建分支命令:
git branch (branchname)
- 切换分支命令:
git checkout (branchname)
- 创建并切换分支:
git checkout -b (branchname)
- 列出分支列表:
git branch
- 删除分支:
git branch -d (branchname)
- 分支合并:
git merge --no-ff (needMergeBranchname) -m "合并注释"
- 查看远程所有分支:
git branch -r
-
查看所有本地和远程分支: `git branch -a`
3.git基本操作
- 将本地文件添加到缓存:
git add filname1 filename
(单个 多个都可以,多个用空格隔开)git add .
(把新增的 修改的 文件都加到缓存中)git add -A
(把新增的 修改的 删除的都加到缓存中)
- 本地从缓存中加到本地仓库中去:
git commit -m "版本描述"
- 本地一键提交到仓库中并注释:
git commit -am "版本描述"
是 git add 和 git commit 的合体 - 查看项目的当前状态:
git status
查看是否有文件未提交 - 查看执行 git status 的结果的详细信息:
git diff
- 尚未缓存的改动:
git diff
- 查看已缓存的改动:
git diff --cached
- 查看已缓存的与未缓存的所有改动:
git diff HEAD
- 显示摘要而非整个 diff:
git diff --stat
- 先列出两个版本间发生更改的文件列表:
git diff commit1 commit2 --stat --name-only
- 查看指定文件在两个版本间发生的变更:
git diff commit1 commit2 -- somefile.js
- 如果感觉这种显示不够直观,可以使用 vimdiff 查看:
git difftool commit1 commit2 -- somefile.js
- 尚未缓存的改动:
- 查看提交历史: git log
- 这个参数是一个显示美化参数,其会让提交记录在一行展示,方便我们查看。
git log --oneline (--pretty=oneline --abbrev-commit 合用的简写)
- 显示基本信息之外,还附带了每次提交的变化
git log -p -2
它会显示每次提交所引入的差异(按 补丁 的格式输出)。 你也可以限制显示的日志条目数量,例如使用 -2 选项来只显示最近的两次提交
- 这个参数是一个显示美化参数,其会让提交记录在一行展示,方便我们查看。
- 给提交点打标签
- 从远程拉取:
git fetch
fetch是将远程主机的最新内容拉到本地,不进行合并git pull
pull 则是将远程主机的master分支最新内容拉下来后与当前本地分支直接合并 fetch+merge
- 推送到远程仓库:
git push
push 推送本地修改分支至远程git仓库 - 远程仓库地址:
git remote
查看远程仓库地址git remote -v
详细查看git remote add origin https://xxxxxxxxxxxx.git
添加远程仓库地址git remote remove origin
删除本地指定的远程地址
4.git放弃本地修改操作(慎用)
- 参考文档
- 未使用 git add 缓存代码时:
git checkout -- filepathname
(比如: git checkout -- readme.md ,不要忘记中间的 “--” ,不写就成了检出分支了!!)。放弃所有的文件修改可以使用 git checkout . 命令。 - 已经使用了 git add 缓存了代码:
git reset HEAD filepathname
(比如: git reset HEAD readme.md)来放弃指定文件的缓存,放弃所以的缓存可以使用 git reset HEAD . 命令。此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。 - 已经用 git commit 提交了代码:
git reset --hard HEAD^
来回退到上一次commit的状态。此命令可以用来回退到任意版本:git reset --hard commitid
你可以使用 git log 命令来查看git的提交历史。git log 的输出如下,之一这里可以看到第一行就是 commitid:
5.git忽略文件
-
本地新增文件或文件夹,未提交到远程版本库中: 将你需要忽略的文件加入到.gitignore文件中,这些文件可能是数据库密码的配置文件 或者本地环境相关的配置等等;
-
.gitignore可以有多个,影响范围当前文件及其子文件
-
.gitignore文件忽略demo
# Maven # target/ # IDEA # .idea/ *.iml # Eclipse # .settings/ .classpath .project
-
git rm -r --cached .
删除缓存区的所有文件
-
-
对于已经被git追踪的文件: 好文档推荐
- git rm --cached filename (推荐)
- git rm --cached 删除的是追踪状态,而不是物理文件;如果你真的是彻底不想要了,你也可以直接 rm+忽略+提交。
- 如果误操作了,可以
gir reset HEAD filename
- git update-index --assume-unchanged filename
- git update-index --assume-unchanged 的真正用法是这样的:你正在修改一个巨大的文件,你先对其 git update-index --assume-unchanged,这样 Git 暂时不会理睬你对文件做的修改;
- 当你的工作告一段落决定可以提交的时候,重置改标识:git update-index --no-assume-unchanged,于是 Git 只需要做一次更新,这是完全可以接受的了;
提交+推送。
- git update-index --skip-worktree filename
- git rm --cached filename (推荐)
6.git配置
- 查看git的配置
git config -l
- git配置本地仓库的userName(必须)
git config user.name 'djw'
- git配置本地仓库的邮箱(必须)
git config user.email 'djw@baidu.com'
7.git标签
像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等)。