Git常用命令
更详细请看下面的文章:
https://www.jianshu.com/p/e838fd323827
https://www.jianshu.com/p/d27286368535
#
1、Git工作区、暂存区、仓库关系图#
1.1、工作流程提交的文件修改先通过git add
通通放到暂存区,然后,通过git commit
一次性提交暂存区的所有修改到本地仓库。
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西
------(1) 其中最重要的就是称为stage(或者叫index)的暂存区
------(2) 还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD,HEAD指向的是分支中的当前版本
------(3)
#
2、工作区和暂存区文件增加/删除#
2.1、提交文件到暂存区# 添加指定文件到暂存区 ( [file1] 表示文件名含后缀名 可同时指定多个) git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录 git add [dir]
# 添加当前目录的所有文件到暂存区 git add . # 添加每个变化前,都会要求确认# 对于同一个文件的多处变化,可以实现分次提交 git add -p
#
2.3、删除工作区或暂存区文件# 删除工作区文件,并且将这次删除放入暂存区 git rm [file1] [file2] ...
# 删除暂存区该文件,但该文件会保留在工作区 git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区 git mv [file-original] [file-renamed]
#
2.4、手动删除了工作区文件忘记暂存区删除时#手动删除了工作区文件忘记暂存区时候删除时,#先对比工作区与暂存区文件(git status命令会提示哪些文件被删除)后再删除git status git rm [file1] [file2] ...
#
2.5、删除版本库中的文件如果确实要从版本库中删除该文件,那就用命令git rm [file1]
删掉,并且git commit -m '[msg]'
向仓库提交该删除
git rm [file1] [file2] ...git commit -m '删除[file1] [file2]'
#
2.6、误删工作区暂存区文件如果使用git rm [file1]
删除文件后发现删除错了,此时只能把仓库中的该文件拉下来
git checkout -- [file1]
#
3、代码提交到git本地仓库# 提交暂存区到仓库区git commit -m [message]
# 提交暂存区的指定文件到仓库区git commit [file1] [file2] ... -m [message] # 提交工作区自上次commit之后的变化,直接到仓库区git commit -a
# 提交时显示所有diff信息git commit -v # 使用一次新的commit,替代上一次提交# 如果代码没有任何新变化,则用来改写上一次commit的提交信息git commit --amend -m [message] # 重做上一次commit,并包括指定文件的新变化git commit --amend [file1] [file2] ...
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files.
使用 git add 表示告诉git仓库我要提交哪些文件并放入暂存区, 使用 git commit 将这些文件提交到git仓库清空暂存区
#
4、同步远程仓库#
4.1、推送本地仓库到远程# 上传本地指定分支到远程仓库 git push [remote] [branch] # 强行推送当前分支到远程仓库,即使有冲突 git push [remote] --force # 推送所有分支到远程仓库 git push [remote] --all
#
4.2、拉取远程仓库最新到本地# 取回远程仓库的变化,并与本地分支合并 git pull [remote] [branch]
#
4.3、其他# 下载远程仓库的所有变动 git fetch [remote] # 显示所有远程仓库 git remote -v # 显示某个远程仓库的信息 git remote show [remote] # 增加一个新的远程仓库,并命名 git remote add [shortname] [url]
#
5、撤销# 恢复暂存区的指定文件到工作区 git checkout [file] # 恢复某个commit的指定文件到暂存区和工作区 git checkout [commit] [file] # 恢复暂存区的所有文件到工作区 git checkout . # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 git reset [file] # 重置暂存区与工作区,与上一次commit保持一致 git reset --hard # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 git reset [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致 git reset --hard [commit] # 重置当前HEAD为指定commit,但保持暂存区和工作区不变 git reset --keep [commit] # 新建一个commit,用来撤销指定commit# 后者的所有变化都将被前者抵消,并且应用到当前分支 git revert [commit] # 暂时将未提交的变化移除,稍后再移入 git stash git stash pop
#
6、查看信息#
6.1、查看有变更的文件信息# 显示有变更的文件 git status
(1)显示当前在哪个git仓库分支上
(2)有没有提交过文件
(3)未提交过的文件有哪些
(4)提交过,再被修改后未重新提交的文件 git diff [file]可查看修改后于之前的不同之处
(5)使用git add [file]提交到暂存区的文件 但是未git commit -m '[msg]'的文件有哪些
#
6.2、查看提交日志# 显示当前分支的版本历史 git log
# 显示commit历史,以及每次commit发生变更的文件 git log --stat
# 搜索提交历史,根据关键词 git log -S [keyword]
# 显示某个commit之后的所有变动,每个commit占据一行 git log [tag] HEAD --pretty=format:%s
# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 git log [tag] HEAD --grep feature # 显示某个文件的版本历史,包括文件改名 git log --follow [file] git whatchanged [file]
# 显示指定文件相关的每一次diff git log -p [file]
# 显示过去5次提交 git log -5 --pretty --oneline
#
6.3、查看修改文件的用户信息# 显示所有提交过的用户,按提交次数排序 git shortlog -sn # 显示指定文件是什么人在什么时间修改过 git blame [file]
#
6.4、查看文件差异# 显示暂存区和工作区的差异 git diff # 显示暂存区和上一个commit的差异 git diff --cached [file] # 显示工作区与当前分支最新commit之间的差异 git diff HEAD
# 显示两次提交之间的差异 git diff [first-branch]...[second-branch] # 显示今天你写了多少行代码 git diff --shortstat "@{0 day ago}"
# 显示某次提交的元数据和内容变化 git show [commit] # 显示某次提交发生变化的文件 git show --name-only [commit]
# 显示某次提交时,某个文件的内容 git show [commit]:[filename]
#
6.5、查看命令历史# 显示当前分支的所有命令记录 git reflog
【注意】回退到之前的某个版本后再执行git log回退到的之前某个版本后的之后提交记录就没有了如果再想找回哪些版本只能通过git reflog查看所有命令历史来找回了
#
7、分支#
7.1、查看分支&创建分支# 列出所有本地分支 git branch
# 列出所有远程分支 git branch -r
# 列出所有本地分支和远程分支 git branch -a
# 新建一个分支,但依然停留在当前分支 git branch [branch-name]
# 新建一个分支,并切换到该分支 git checkout -b [branch]
# 以远程分支为基础新建一个分支,并切换到该分支 git checkout -b [branch] origin/[remote-branch]
# 新建一个分支,指向指定commit git branch [branch] [commit]
# 新建一个分支,指向某个tag git checkout -b [branch] [tag]
【注意】执行git branch 返回中是绿色字体并标有号的表示是当前的分支名)返回中是绿色字体并标有号的表示是当前的分支名
#
7.2、切换分支# 切换到指定分支,并更新工作区 git checkout [branch-name]
# 切换到上一个分支 git checkout -
【注意】切换分支前,要把当前分支中暂存区文件先提交或清空,或用git stash临时存储当前暂存区文件,不然该分支中暂存区文件会跑到新分支中去,到重新切换回是用git stash pop取出即可 。
#
7.3、合并分支# 合并指定分支到当前分支 git merge [branch]
# 选择一个commit,合并进当前分支 git cherry-pick [commit]
【注意】合并前必须将当前分支转到要合并到的分支上用git log --graph命令可以看到分支合并图
#
7.4、删除分支# 删除分支 git branch -d [branch-name]
#强制删除分支 git branch -D [branch-name]
# 删除远程分支 git push origin --delete [branch-name] git branch -dr [remote/branch]
#
7.5、推送分支到远程仓库#向远程仓库推送分支$ git push [origin] [branch]
#向远程仓库推送master分支$ git push origin master
#如果要推送其他分支,比如dev,就改成:$ git push origin dev