git 命令
git上传本地代码参考:https://www.jianshu.com/p/8e46d88db49e
一、常用术语
1)、仓库(Repository)
受版本控制的所有文件修订历史的共享数据库
2)、工作空间(Workspace)
本地硬盘或Unix 用户帐户上编辑的文件副本
3)、工作树/区(Working tree)
工作区中包含了仓库的工作文件。您可以修改的内容和提交更改作为新的提交到仓库。
4)、暂存区(Staging area)
暂存区是工作区用来提交更改(commit)前可以暂存工作区的变化。
5)、索引(Index)
索引是暂存区的另一种术语。
6)、签入(Checkin)
将新版本复制回仓库
7)、签出(Checkout)
从仓库中将文件的最新修订版本复制到工作空间
8)、提交(Commit)
对各自文件的工作副本做了更改,并将这些更改提交到仓库
9)、冲突(Conflict)
多人对同一文件的工作副本进行更改,并将这些更改提交到仓库
10)、合并(Merge)
将某分支上的更改联接到此主干或同为主干的另一个分支
11)、分支(Branch)
从主线上分离开的副本,默认分支叫master
12)、锁(Lock)
获得修改文件的专有权限。
13)、头(HEAD)
头是一个象征性的参考,最常用以指向当前选择的分支。
14)、修订(Revision)
表示代码的一个版本状态。Git通过用SHA1 hash算法表示的ID来标识不同的版本。
15)、标记(Tags)
标记指的是某个分支某个特定时间点的状态。通过标记,可以很方便的切换到标记时的
状态。
二、Git的配置
#查看现在的git环境详细配置
git config -l
#查看系统config
git config --system --list
#查看当前用户(global)配置
git config --global --list
#查看当前仓库配置信息
git config --local --list
1)、 /etc/gitconfig:包含了适用于系统所有用户和所有项目的值。(Win:
C:\Program Files\Git\mingw64\etc\gitconfig) --system 系统级
2)、~/.gitconfig:只适用于当前登录用户的配置。(Win:
C:\Users\Administrator\.gitconfig) --global 全局
3)、位于git项目目录中的.git/config:适用于特定git项目的配置。(Win:
C:\gitProject) --local当前项目
注意:对于同一配置项,三个配置文件的优先级是1<2<3
三、配置用户名和邮箱
git config --global user.name "zhangguo" #名称
git config --global user.email zhangguo@qq.com #邮箱
删除配置项
git config [--local|--global|--system] --unset section.key
四、git命令
1、把这个目录变成Git可以管理的仓库
git init
2、将本地文件提交到暂存区(提交文件夹会提交文件下所有的文件)
git add
3、把暂存区里的文件提交到本地仓库
git commit -m "add a readme file"
4、把本地仓库的文件提交到远程仓库
git push
5、在本地增加一个新的远程仓库,并命名
git remote add [shortname] [url]
将本地库的内推送到远程仓库
git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分
支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以
后的推送或者拉取时就可以简化命令。
6、创建ssh key
ssh-keygen -t rsa -C "youremail@example.com"
从远程库克隆
git clone url
7、git 工作区域
8、文件的状态
9、查看所有文件状态
git status
10、查看所有差异
git diff
查看某个文件的差异
git diff -- [files]
(1)当工作区有改动的时候,暂存区为空(没有进行git add),那么diff的对比是和上
次的commit的记录进行对比的。
(2)当工作区有改动,暂存区有东西的时候,diff是和暂存区进行比较的。
比较暂存区的文件与之前已经提交过的文件
git diff --cached
比较repo与工作空间中的文件差异
git diff HEAD~n
比较两个已经提交的版本之间的差异
git diff cimmit-id1 cimmit-id2
11、撤销工作区的修改
git checkout -- file
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,
这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一
模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到
暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout branch -- filename
维持HEAD的指向不变。用branch所指向的提交中filename替换暂存区和工作区中相
应的文件。注意会将暂存区和工作区中的filename文件直接覆盖。
git checkout commit_id -- file_name
如果不加commit_id,那么git checkout -- file_name 表示恢复文件到本地版本库中最新的状态
12、撤销暂存区的更新
git reset HEAD <file>
把暂存区的更新移出到WorkSpace中
13、版本回退
撤销提交有两种方式:使用HEAD指针和使用commit id
在Git中,有一个HEAD指针指向当前分支中最新的提交。当前版本,我们使用"HEAD^",那么再钱
一个版本可以使用"HEAD^^",如果想回退到更早的提交,可以使用"HEAD~n"。(也就是,
HEAD^=HEAD~1,HEAD^^=HEAD~2)
git reset --hard HEAD^
git reset --hard HEAD~1
git reset --hard commit-id
--hard:撤销并删除相应的更新
--soft:撤销相应的更新,把这些更新的内容放到Stage中
14、日志查看命令
查看所有分支日志
git reflog
查看日志
git log
将每条日志的输出为一行
git log --pretty=oneline git log --oneline
用来显示提交的改动记录,相当于多次使用git show [commit_id]的结果。
git log -p
显示每次提交对应的文件改动
git log --name-status
通过作者搜索
git log --author yourname
通过提交关键字搜索
git log --grep keywords
以图表的形式进行查看
git log --graph
15、文件删除
删除未跟踪文件
rm file
删除已提交文件(包括工作区和暂存区中的文件)
git rm -f file
删除暂存区的文件,不删除工作区的文件
git rm --cached file
16、git 分支管理
git branch 查看本地所有分支
git branch -r 查看远程所有分支
git branch -a 查看本地和远程的所有分支
git branch 分支名称 本地新建一个分支但不切换到新建分支上
git branch --track [branch] [remote-branch] 新建一个分支,与指定的远程分支建立追踪关系
git checkout -b 分支名 本地新建并切换到新分支
git checkout -b dev origin/dev 拉取远程上的dev分支到本地
git push --set-upstream origin test 将本地分支推到远程上
git checkout 分支名 切换到指定分支
git merge 分支 将指定分支合并到当前分支
git branch -d [branch-name] 删除分支
git push origin --delete [branch-name] 删除远程分支
16、远程仓库操作
显示所有远程仓库:git remote -v
显示某个远程仓库的信息: git remote show [remote]
增加一个新的远程仓库,并命名:git remote add [shortname] [url]
取回远程仓库的变化,并与本地分支合并: git pull [remote] [branch]
上传本地指定分支到远程仓库:git push [remote] [branch]
修改远程仓库:git remote rename [oldname] [newname]
删除远程仓库:git remote rm [remote-name]
18、配置别名
git config --global alias.st status 将status设置别名为st,这样就可以将git status 简写为git st
19、统计
有时候想统计仓库的情况,比如代码量,贡献者之类的。
1 统计某人的commit数量
git log --author="$(git config --get user.name)" --oneline | wc -l
2 统计某人的代码量
git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | awk '{adds +=
$1; subs += $2; all += $1 + $2} END {printf "added lines: %s removed lines : %s all lines:
%s\n",adds,subs,all}'
3 提交排名top 10
%aN代表只显示commit的author name。也可以使用%ae,使用author email,防止出现
重名的情况。然后按照名字或者email排序,之后uniq的时候数count,之后按照第一列的
值按照number的方式排序,最后取前10条记录。
git log --pretty=%aN | sort | uniq -c | sort -k1 -n -r | head -n 10
4 统计有多少个代码贡献者
sort -u 等于 sort | uniq
git log --pretty=%aN | sort -u | wc -l