【Git】常用命令和配置

夙愿已清 提交于 2020-03-18 18:26:40

原理

Git 命令很多,但日常使用只要记住下图的6个主要命令,就可以了。
image.png
工作区(Working Directory)
在git管理下的正常目录都算是工作区。就是你平时存放项目代码的地方。
暂存区(Stage/Index)
暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。
仓库区(Repository或Git Directory)
仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。
远程仓库(Remote Directory)
远程仓库,托管代码的服务器(如Github、Bitbucket等),可以简单的认为是你项目组中的一台电脑用于远程数据交换。

比较三个区之间的数据差别,可以用diff 命令:

  • git diff 工作区 vs 暂存区
  • git diff head 工作区 vs 版本库
  • git diff --cached 暂存区 vs 版本库

git的一般工作流程:

  • 1、在工作目录中添加、修改文件;
  • 2、将需要进行版本管理的文件放入暂存区域;
  • 3、将暂存区域的文件提交到git仓库。
    因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)。

常用命令

新建代码库

git init #在当前目录新建一个Git代码库
git init <project-name> # 新建一个目录,将其初始化为Git代码库
git clone <url> # 下载一个项目和它的整个代码历史

配置

# 设置提交代码时的用户信息
git config --global user.name "<your name>"
git config --global user.email "<your email>"

增删文件

git add <file1> <file2> # 添加指定文件到暂存区
git add <dir> # 添加指定目录到暂存区,包括子目录
git add .  # 添加当前目录的所有文件到暂存区
git add -p  #同一文件多处变化时,分次提交

git rm <file1> <file2>  # 删除工作区文件,并且将这次删除放入暂存区
git rm --cached <file> #停止追踪该文件,但该文件会保留在工作区

git mv  <old_file>  <new_file> # 改名文件,并且将这个改名放入暂存区

代码提交

git commit -m <message> # 提交暂存区到仓库区
git commit <file1> <file2>  -m <message>  # 提交暂存区的指定文件到仓库区

git commit -a #自上次commit变化后一次提交到仓库

git commit -v  #所有时显示所有diff信息

git commit --amend -m <message>  #替代上次commit
git commit --amend <file1> <file2> # 重做上一次commit,并包括指定文件的新变化

分支

git branch #查看所有本地分支
git branch -r #查看所有远程分支
git branch -a #查看所有分支

git branch <new_branch> #新建分支,但仍在当前分支
git checkout -b <new_branch> #新建分支并切换到该分支,更常用
git branch --track <new_branch> <remote_branch> #新建分支并追踪远程分支

git checkout <branch_name> #切换到指定分支
git checkout -  #切换到上一分支

git branch --set-upstream <branch> <remote_branch> #在现有分支和远程分支间建立追踪关系
git merge <branch> #合并指定分支到当前分支

git branch -d <branch> #删除分支
git push origin --delete <branch> #删除远程分支

标签

git tag # 列出所有tag
git tag <tag_name>  # 新建一个tag在当前commit
git tag <tag_name> <commit>  #新建一个tag在指定commit

git tag -d <tag> # 删除本地tag
git push origin :refs/tags/<tag_name> # 删除远程tag

git show <tag>  # 查看tag信息

查看信息
命令太多,好难记。需要用时再找。

git status # 显示有变更的文件
git log # 显示当前分支的版本历史
git log --stat # 显示commit历史,以及每次commit发生变更的文件
git log -S <keyword> # 搜索提交历史,根据关键词
git log <tag> HEAD --pretty=format:%s # 显示某个commit之后的所有变动,每个commit占据一行

git log --follow <file> # 显示某个文件的版本历史,包括文件改名
git whatchanged <file>  # 显示某个文件的版本历史,包括文件改名

git log -p <file> # 显示指定文件相关的每一次diff
git log -5 --pretty --oneline # 显示过去5次提交

git diff <first_branch> <second_branch> # 显示两次提交之间的差异
git reflog # 显示当前分支的最近几次提交

远程同步

git fetch <remote> # 下载远程仓库的所有变动
git remote -v # 显示所有远程仓库
git remote show <remote> # 显示某个远程仓库的信息

git remote add <new_remote> <url> # 增加一个新的远程仓库,并命名
git pull <remote> <branch>       #pull=fetch + merge  取回远程仓库的变化,并与本地分支合并

gut push <remote> <branch>  # 上传本地指定分支到远程仓库
git push <remote> --force  # 强行推送当前分支到远程仓库,即使有冲突
git push <remote> --all # 推送所有分支到远程仓库

撤销
也好多命令,懒得记。

git checkout <file> # 恢复暂存区的指定文件到工作区
git checkout <commit> <file> # 恢复某个commit的指定文件到暂存区和工作区
git checkout . # 恢复暂存区的所有文件到工作区

其他

git archive  # 生成一个可供发布的压缩包

其他

Linux配置别名
在Linux中配置git命令的别名,类似于Linux命令的alias。将以下设置加入~/.bashrc中:

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch

以后用时,只需git stgit ci -m "message"查看,其他命令类似。
Git图形界面
Git有很多图形界面工具,推荐SourceTree

Ref:
常用 Git 命令清单
廖雪峰Git
git工作区、暂存区、版本库、远程仓库
git tag 介绍

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!