git的介绍
简单介绍
Git
是一个分布式版本控制软件,最初由Linus Torvalds
创作,于2005年以GPL
发布。最初目的是为更好地管理Linux
内核开发而设计。
Git工作流程以及各个区域
- Workspace:工作区
- Staging/Index:暂存区
- Local Repository:本地仓库(可修改)
- /refs/remotes:远程仓库的引用(不可修改)
- Remote:远程仓库
Git各种命令
Git简单命令
# 在当前目录新建一个git仓库
git init
# 打开git仓库图形界面
gitk
# 显示所有变更信息
git status
# 删除所有Untracked files
git clean -fd
# 下载远程仓库的所有更新
git fetch remote
# 下载远程仓库的所有更新,并且Merge
git pull romote branch-name
# 查看上次commit id
git rev-parse HEAD
# 将指定分支合并到当前分支
git merge branch-name
# 将最近的一次commit打包到patch文件中
git format-patch HEAD^
# 将patch文件 添加到本地仓库
git am patch-file
# 查看指定文件修改历史
git blame file-name
Git常用命令
git clone 克隆
# 将远程git仓库克隆到本地
git clone url
# 将远程git仓库克隆到本地
git clone -b branch url
git stash 恢复
# 将修改过,未add到Staging区的文件,暂时存储起来
git stash
# 恢复之前stash存储的内容
git stash apply
# 保存stash 并写message
git stash save "stash test"
# 查看stash了哪些存储
git stash list
# 将stash@{1}存储的内容还原到工作区
git stash apply stash@{1}
# 删除stash@{1}存储的内容
git stash drop stash@{1}
# 删除所有缓存的stash
git stash clear
git config 配置项
# 配置git图形界面编码为utf-8
git config --global gui.encoding=utf-8
# 设置全局提交代码的用户名
git config --global user.name name
# 设置全局提交代码时的邮箱
git config --global user.email email
# 设置当前项目提交代码的用户名
git config user.name name
git remote 远程仓库
# 显示所有远程仓库
git remote -v
# 增加一个新的远程仓库
git remote add name url
# 删除指定远程仓库
git remote remove name
# 获取指定远程仓库的详细信息
git remote show origin
git add 添加
# 添加所有的修改到Staging区
git add .
git add --all
# 添加指定文件到Staging区
git add file
# 添加多个修改的文件到Staging区
git add file1 file2
# 添加修改的目录到Staging区
git add dir
# 添加所有src目录下main开头的所有文件到Staging区
git add src/main*
git commit 提交
# 提交Staging区的代码到本地仓库区
git commit -m "message"
# 提交Staging中在指定文件到本地仓库区
git commit file1 file2 -m "message"
# 使用新的一次commit,来覆盖上一次commit
git commit --amend -m "message"
# 修改上次提交的用户名和邮箱
git commit --amend --author="name <email>" --no-edit
git branch 分支
# 列出本地所有分支
git branch
# 列出本地所有分支 并显示最后一次提交的哈希值
git branch -v
# 在-v 的基础上 并且显示上游分支的名字
git branch -vv
# 列出上游所有分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch branch-name
# 删除分支
git branch -d branch-name
# 设置分支上游
git branch --set-upstream-to origin/master
# 本地分支重命名
git branch -m old-branch new-branch
git checkout 创建分支
# 创建本地分支并关联远程分支
git checkout -b local-branch origin/remote-branch
# 新建一个分支,且切换到新分支
git checkout -b branch-name
# 切换到另一个分支
git checkout branch-name
# 撤销工作区文件的修改,跟上次Commit一样
git checkout commit-file
git tag 标签
# 创建带有说明的标签
git tag -a v1.4 -m 'my version 1.4'
# 打标签
git tag tag-name
# 查看所有标签
git tag
# 给指定commit打标签
git tag tag-name commit-id
# 删除标签
git tag -d tag-name
git push 推送
# 删除远程分支
git push origin :master
# 删除远程标签
git push origin --delete tag tag-name
# 上传本地仓库到远程分支
git push remote branch-name
# 强行推送当前分支到远程分支
git push remote branch-name --force
# 推送所有分支到远程仓库
git push remote --all
# 推送所有标签
git push --tags
# 推送指定标签
git push origin tag-name
# 删除远程标签(需要先删除本地标签)
git push origin :refs/tags/tag-name
# 将本地dev分支push到远程master分支
git push origin dev:master
git reset 重置
# 将未commit的文件移出Staging区
git reset HEAD
# 重置Staging区与上次commit的一样
git reset --hard
# 重置Commit代码和远程分支代码一样
git reset --hard origin/master
# 回退到上个commit
git reset --hard HEAD^
# 回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard HEAD~3
回退到指定commit
git reset --hard commit-id
git diff 查看仓库
# 查看文件在工作区和暂存区区别
git diff file-name
# 查看暂存区和本地仓库区别
git diff --cached file-name
# 查看文件和另一个分支的区别
git diff branch-name file-name
# 查看两次提交的区别
git diff commit-id commit-id
git show 查看提交信息
# 查看指定标签的提交信息
git show tag-name
# 查看具体的某次改动
git show commit-id
git log 查看历史
# 指定文件夹 log
git log --pretty=format:"%h %cn %s %cd" --author="iisheng\|胜哥" --date=short src
# 查看指定用户指定format 提交
git log --pretty=format:"%h %cn %s %cd" --author=iisheng --date=short
# 查看该文件的改动历史
git log --pretty=oneline file
# 图形化查看历史提交
git log --graph --pretty=oneline --abbrev-commit
# 统计仓库提交排名前5
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
# 查看指定用户添加代码行数,和删除代码行数
git log --author="iisheng" --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 } END { printf "added lines: %s removed lines : %s \n",add,subs }'
git revert 撤销
# 撤销前一次commit
git revert HEAD
# 撤销前前一次commit
git revert HEAD^
# 撤销指定某次commit
git revert commit-id
git rebase 合并分支
# 将指定分支合并到当前分支
git rebase branch-name
# 执行commit id 将rebase 停留在指定commit 处
git rebase -i commit-id
# 执行commit id 将rebase 停留在 项目首次commit处
git rebase -i --root
git restore 恢复第一次add的文件
# 恢复第一次add 的文件,同 git rm --cached
git restore --staged file
# 移除staging区的文件,同 git checkout
git restore file