摘要:本文旨在总结在工作中常用的一些git操作。如有错误,欢迎指正。
Git简介
Git是开源的分布式版本控制系统,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git下载安装
下载网址:http://git-scm.com/downloads
官网下载很慢,可直接百度去其他网址下载会比较快。
安装步骤很简单,此处不介绍
Git常用区域介绍
Git常用命令
学会使用help命令
对于不熟悉的命令,可使用help命令查看
1) 拉取远程仓库到本地仓库和工作区
- git pull –rebase
2) 将工作区的修改添加到暂存区
- git add [file] 暂存单个文件
- git add . 暂存工作区所有的文件
- git add -u 暂存工作区中的已跟踪的文件
3) 查看仓库修改的文件
- git status
4) 提交暂存区的修改到本地仓库
- git commit –sm “修改信息”
- git commit –amend 针对提交打补丁使用
5) 将本地修改的内容提交到Gerrit
- git push
6) 取消已暂存的文件
- git rm --cache [file] 会取消已暂存的文件,且会使得文件变成untracked file
- git reset HEAD [file] 会取消指定已暂存的文件,但依然是tracked file
- git reset HEAD 取消所有已暂存的文件
untracked file (未监控/跟踪的文件)和tracked file 的区别:
untracked 文件是重来没被add过,但在工作区存在,修改untracked文件后,用git status 查看不到。
tracked文件,被add过,修改之后,用git status能查看到修改的状态
这三个之间的相同点:取消已暂存的修改,但是工作区的修改还在。
7)撤销修改
撤销工作区的修改
- git reset --hard [commit ID]
- git reset --hard HEAD^
- git reset --hard HEAD~n
- git reset --hard origin
git reset --hard 回退到最新的版本。工作区的修改全部没了。
撤销已提交的状态(保留工作区的更改)
- git reset --soft [commit ID]
- git reset --soft HEAD^
- git reset --soft HEAD~n
- git reset --soft origin
soft参数,只删除commit,但不删除实际更改,将更改放入暂存区;
hard参数,将commit及相关更改全部删除
8) checkout本地仓库到工作区
git checkout [file]
git checkout .
可以通过git checkout的方式,将本地工作区回滚到任意你想查看的版本/提交点
- git checkout [tag name]
- git checkout [commit ID]
- git checkout [commit ID][file name]
- git checkout [branch name] 切换分支
标记部分为你所需要回滚的版本号/提交点
本地的修改都不要了,返回最新代码,直接 git checkout [分支名];如 git checkout master
9) 查看文件修改记录
①查看单个文件的提交记录
- git log 查看所有的提交记录
- git log –n 查看最近n次提交
- git log [file name]
查看单个文件的提交记录,详细列出提交记录,包括commit ID、提交者、提交时间、task名等; - git log --author=“[name]” [file name] 查看某人的提交
- git log --pretty=oneline [file name] 单行模式列出提交记录,只包含commit ID和task名;
②查看单个文件的详细修改记录
通过git blame命令,可以查看到该文件所有代码行的最新更改记录
- git blame [file name]
你也可以通过-L参数,指定查看特定的数行 - git blame -L [start line],[end line] [file name]
note:输出格式 [commit ID][提交者和时间][行数][实际文本内容]
③查看详细修改点
通过git diff命令,可以查看修改点,查看还未push的更改点
- git diff HEAD [file name]
查看对应commit与最新提交的差异 - git diff [commit ID] [file name]
查看两个commit之间的差异 - git diff [commit ID 1] [commit ID 2] [file name]
PS: [file name]可选。如果不带该参数,则查看所有文件的修改记录
除了git diff之外,git show也可以查看到具体的修改前后比
- git show [commit ID] [file name]
10) 分支操作
- git branch -a 查看所有分支,你当前所在的分支前面会标记一个*
- git branch [branch name] 创建一个新的分支
- git checkout -b [branch name] 切换到分支branch name
- git branch -d [branch name] 删除分支,大写D为强制删除,可以删除未merged的分支
- git checkout master
git merge testing 将testing分支合并到主分支上 - git branch -vv 查看本地分支与远程分支的对应关系
- git config --list 查看本地一些配置,包括分支的对应关系
- git push origin --delete test 删除远程的test分支
11) git stash使用
适用场景:临时去改一个bug,不想将半成品提交上去,改完还要继续之前的工作
- git stash
备份当前工作区的修改与暂存区到堆栈区(未完结变更区,不是暂存区)中,将工作区恢复到上一次提交时的状态, - git stash pop
将上一次存到暂存区的文件读取回工作区,git stash apply stash@{1}回到第几个暂存的状态 - git stash list
查看暂存区暂存的状况 - git stash clear
清空暂存区
12) 删除git库中untracked file(未监控)的文件
在编译git库拉下来的代码时,往往会产生一些中间文件,这些文件我们根本不需要,尤其是在成产环节做预编译,检查代码提交是否能编译通过这种case时,我们往往需要编译完成后不管正确与否,还原现场,以方便下次sync代码时不受上一次的编译影响。
-
git clean -f
删除 untracked files
-
git clean -fd
连untracked 的目录也一起删掉
-
git clean -xfd
连 git ignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
PS:在用上述 git clean 前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd