git 命令行操作
参考网络上的总结和笔记,并亲身实践,稍作整合如下,送给你,希望有所帮助
----------------先明确几个概念-----------------
工作区A、暂存区B、本地仓库C、远程仓库D
关系如下:
在IDE编辑文件属于工作区A
add指令提交工作区A的更改到暂存区B
commit指令提交暂存区B的内容到本地仓库C
pull指令拉去远程仓库D的更改到本地仓库C并同步工作区A
push指令推送本地仓库C的更改到远程仓库D
----------------一般的开发提交和冲突解决流程-----------------
1 将所有/指定文件由工作区A添加到暂存区B
git add .
git add client/App.vue
2 提交暂存区B到本地仓库区C
git commit -m "更新全局通用组件"
3 取回远程仓库D变化,并与本地仓库C合并,同时更新工作区A
git pull
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
注意:
实际操作中为避免提交记录中的乱merge现象,这里一般选择 git pull --rebase,
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决冲突,
在解决完冲突后,用"git-add"命令去更新这些内容, 然后,你无需执行 git-commit,
只要执行: git rebase --continue,这样git会继续应用余下的补丁。
在任何时候,都可以用git rebase --abort参数来终止rebase的行动,并且mywork分支会回到rebase开始前的状态。
4 如果有冲突,在工作区A解决冲突,更新这些内容的索引,然后同步本地仓库C
git add .
git rebase --continue
5 将本地仓库C推送到远程仓库D
git push
----------------git rm 的使用场景-----------------
1 对于工作区A新增加的文件,如果还未add到暂存区B,如下操作会直接删除掉工作区A的该文件
rm client/sss.css
2 对于工作区A新增加/修改的文件,如果已经add到暂存区B,以下操作会删除工作区文件,并且将这次删除放入暂存区
git rm -f client/sss.css
----------------撤销操作-----------------
1 对于工作区A修改的文件,如果还没add到暂存区B,以下操作会撤销工作区A的修改,与暂存区B同步
git checkout client/App.vue (撤销工作区A编辑的内容)
2 对于工作区A修改/新增的文件,如果已经add到暂存区B,以下操作会重置暂存区B的指定文件,与上一次commit保持一致,但工作区不变
git reset client/App.vue (撤销add,但是保留工作区A的修改和新增)
3 对于工作区A修改/新增的文件,如果已经add到暂存区B,以下操作会重置暂存区与工作区的所有文件,与上一次commit保持一致
git reset --hard (撤销add,同时撤销工作区A的修改和新增,使得工作区A暂存区B都同步恢复到之前)
4 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset 9bd51685d
5 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --hard 9bd51685d
6 重置当前HEAD为指定commit,但保持暂存区和工作区不变
git reset --keep 9bd51685d
----------------远程同步-----------------
1 git fetch 相当于是从远程获取最新到本地,不会自动merge
git pull = git fetch + git merge
git pull origin master
= 如下指令:
git fetch orgin master //将远程仓库的master分支下载到本地当前branch中
git log -p master ..origin/master //比较本地的master分支和origin/master分支的差别
git merge origin/master //进行合并
= 以下指令:
git fetch origin master:tmp //从远程仓库master分支获取最新,在本地建立tmp分支
git diff tmp //將當前分支和tmp進行對比
git merge tmp //合并tmp分支到当前分支
2 显示所有远程仓库
git remote -v
----------------查看信息-----------------
1 显示暂存区和工作区的文件变动 一般配置简写 gst
git status
2 显示当前分支的版本历史
git log
3 显示commit历史,以及每次commit发生变更的文件
git log --stat
4 显示指定文件相关的每一次diff
git log -p [file]
5 显示过去5次提交
git log -5 --pretty --oneline
6 查找改动某个文件所有的日志
git log --pretty=oneline client/App.vue
7 格式化输出
git log --pretty=format:"%h %an %cd %s" client/App.vue
git log --pretty=format:"%h %an,%cd:%s" client/App.vue
选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
----------------比较差异-----------------
1 显示暂存区和工作区所有变动文件的代码差异 一般配置简写 gd
git diff
2 显示暂存区和工作区指定文件的代码差异 (用于add前的比较)
git diff client/App.vue
3 显示暂存区和上一个commit的差异 (用于add后的比较)
git diff --cached client/App.vue
4 显示工作区与当前分支一个commit之间的差异(注意是工作区与commit之间的差异)
git diff HEAD
5 显示两次提交之间的差异(配合 git log -5 --pretty --oneline 使用)
git diff 9bd51685d 9db0116a8
git diff master develop
-----------------查看提交----------------
1 显示某次提交的元数据和内容变化
git show 9bd51685d
2 显示某次提交发生变化的文件
git show --name-only 9bd51685d
3 显示某次提交时,某个文件的内容
git show 9bd51685d:src/views/index.ejs
-----------------暂存操作----------------
1 暂时将未提交的变化移除,稍后再移入
git stash
git stash pop
----------------分支-----------------
1 列出所有本地分支
git branch
2 列出所有远程分支
git branch -r
3 列出所有本地分支和远程分支
git branch -a
4 新建一个分支,但依然停留在当前分支
git branch [branch-name]
5 切换到指定分支,并更新工作区
git checkout [branch-name]
6 新建一个分支,并切换到该分支
git checkout -b [branch]
7 新建一个分支,指向指定commit
git branch [branch] [commit]
8 切换到上一个分支
git checkout -
9 合并指定分支到当前分支
git merge [branch]
10 将本地分支dvelop_chen推到远程
git push --set-upstream origin [branch]
----------------tag-----------------
1 列出所有tag
git tag
2 新建一个tag在当前commit
git tag [tag]
3新建一个tag在指定commit
git tag [tag] [commit]
4 删除本地tag
git tag -d [tag]
5 删除远程tag
git push origin :refs/tags/[tagName]
6 查看tag信息
git show [tag]
7 提交指定tag
git push [remote] [tag]
8 提交所有tag
git push [remote] --tags
9 新建一个分支,指向某个tag
git checkout -b [branch] [tag]
----------------其他-----------------
git rebase
----------------删除本地、远程分支-----------------
删除本地分支:
git branch -d 分支名(remotes/origin/分支名)
强制删本地:
git branch -D 分支名
删除远程分支:
git push origin --delete guojing(分支名)
远程已被删除,本地git branch -a 仍然显示的分支,采用命令更新:
git fetch -p
----------------分支其他操作-----------------
切换回历史分支:
git checkout 8b473249(常用于排错)
回退至上一版本:
git reset --hard HEAD^
回退至上上一版本:
git reset --hard HEAD^^
回退往上100个版本:
git reset --hard HEAD~100
本地回退:
git reset --hard commit_id(可用 git log –oneline 查看)
远程回退(接上步,然后强推到远程):
git push -f
----------------补充操作-----------------
终止rebase的行动:
git rebase --abort
出现 Your branch and 'origin/master' have diverged,
(use "git pull" to merge the remote branch into yours)
nothing to commit, working tree clean
如果不需要保留本地的修改,只要执行下面两步:
git fetch origin
git reset --hard origin/master
来源:oschina
链接:https://my.oschina.net/u/4412009/blog/3475233