一、Git交互流程和基础命令
Git的命令有很多,我们不一定要全部记住。在理解下图Git各个部件之间的交互流程后,通常只要记住7个就足够我们日常使用了,剩下的命令只需做到大致有个印象,需要的时候再来查阅即可。
git各个部件之间的交互流程在上图中的各个部件为:
- Remote是指在远程服务器端的代码仓库;
- Repository是指在本地的代码仓库;
- Workspace是指当前的工作空间,也许是某一个分支;
- Index是指暂存区,已经暂存但是还没有提交时的一个代码暂存区域;
在上图中各个动作为:
- clone是将远程代码仓库的内容全量拷贝到本地,形成本地的代码仓库;
- fetch是指将远程代码仓库中领先于本地代码仓库的内容拉取过来,更新本地的代码仓库;
- checkout是指根据本地代码仓库检出需要的工作空间;
- pull是指直接将远程代码仓库中领先于工作空间的内容拉取过来,更新工作空间的内容;
- add是将已经修改的内容加入暂存区域,等待提交;
- commit是将所有暂存的内容提交到本地的代码仓库上;
- push是将本地代码仓库上领先的内容推送到远程代码仓库;
二、Git常用命令
Git提供了很多强大而又有意思的命令,下面我们挑选一些相对常用的予以说明。
2.1 代码库相关
- 将某个文件夹设置为本地代码库:
git init
- 新建某个文件夹同时将其设置为本地代码库:
git init filename
- 根据url拉取远程的一个代码库到本地:
git clone http://xxxx
通过init命令初始化的本地仓库并未关联到远程仓库,需要通过git remote add
命令来增加关联到某个远程仓库,详细内容可以参考下面章节列举的远程操作部分。
2.2 配制相关
- 显示当前的git配置信息:
git config --list
- 修改当前git配置信息:
git config -e [--global]
,加上--global表示修改全局的配置 - 设置用户信息:
git config [--global] user.name "jack"
、git config [--global] user.email "xxx@yy.com"
2.3 文件相关
- 将文件或者目录加入到暂存区:
git add [filename1] [filename2]
、git add .
- 将文件从本地仓库区删除,同时也从工作区删除:
git rm [filename1] [filename2]
- 将文件从本地暂存区删除,同时也从工作区删除:
git rm -f [filename1] [filename2]
- 取消追踪文件,将其从仓库区和暂存区删除,但保留在工作区:
git rm --cached [filename]
- 将暂存区的文件改名字:
git mv [originfilename] [renamedfilename]
2.4 提交操作
- 将暂存区的内容提交到本地仓库:
git commit -m "comment"
、git commit [filename1] [filename2] -m "comment"
- 将工作区自上次commit之后的的内容直接提交到仓库区:
git commit -a
- 提交时显示多有diff信息:
git commit -v
- 使用本次提交代替上次提交:
git commit --amend -m "comment"
2.5 分支操作
- 列出本地、远程、所有分支:
git branch
、git branch -r
、git branch -a
- 新建一个分支并停留在当前分支:
git branch [branch-name]
- 新建一个分支并切换到新建的分支上:
git checkout -b [branch-name]
- 新建一个分支并指向某个commit:
git branch [branch-name] [commit]
- 新建一个分支并与指定的远程分支建立追踪关系:
git branch --track [branchname] [remote-branch]
- 切换到指定的分支并更新工作区:
git checkout [branch-name]
- 切换到上一个分支:
git checkout -
- 合并指定分支上的内容到当前分支上:
git merge [branch-name]
- 选择一个commit合并到当前分支上:
git cherry-pick [commit]
- 删除本地指定分支:
git branch -d [branch-name]
- 删除远程分支:
git push origin --delete [branch-name]
2.6 标签操作
- 查看所有标签:
git tag
- 在当前commit新建一个标签:
git tag [tagname]
- 在指定的commit新建一个标签:
git tag [tagname] [commit]
- 删除本地tag:
git tag -d [tagname]
- 删除远程tag:
git push origin :refs/tags/[tagname]
- 查看指定tag的信息:
git show [tagname]
- 提交本地的某个tag:
git push [remote] [tagname]
- 提交本地所有的tag:
git push [remote] --tags
- 新建一个分支并指向某个tag:
git checkout -b [branchname] [tagname]
2.7 信息查看
- 查看变更情况:
git status
- 查看当前分支的版本历史[及变动的文件]:
git log [--stat]
- 显示过去5次提交:
git log -5 --pretty --oneline
- 显示当前分支所有提交过的用户,按照提交次数排序:
git shortlog -sn
- 显示指定文件由谁在什么时间修改过:
git blame [filename]
- 显示暂存区和工作区的差异:
git diff
- 今天写了多少行代码:
git diff --shortstat "@{0 day ago}"
- 显示当前分支的最近几次提交:
git reflog
2.8 远程操作
- 拉取[指定]远程仓库所有分支的变动到本地仓库:
git fetch [remote]
- 显示[所有]远程仓库:
git remote [-v]
- 显示某个远程仓库的信息:
git remote show [remote]
- 新增一个远程仓库:
git remote add [shortname] [url]
- 删除一个远程仓库:
git remote rm [shortname]
- 重命名一个远程仓库:
git remote rename [originname] [newname]
- 拉取远程仓库该分支的所有变动并合并到当前分支:
git pull
- 推送当前分支的内容到远程仓库的该分支[强行推送忽略冲突]:
git push --force
- 推送所有分支的修改内容到远程:
git push --all
2.9 撤销操作
- 恢复暂存区的某个文件到工作区并覆盖工作的该文件:
git checkout [filename]
- 恢复暂存区的所有文件到工作区并覆盖工作区:
git checkout .
- 重置暂存区的某个文件到上次commit的状态,但工作区不变:
git reset [filename]
- 重置暂存区和工作区到上次commit的状态:
git reset --hard
- 恢复某个commit的指定文件到暂存区和工作区:
git checkout [commit] [filename]
- 回退到某个提交版本:
git reset --hard 版本号
网友评论