一直以来, Git 的使用只停留在简单的操作上. 要得心应手的使用 Git, 必须了解点其他的东西.
配置个人信息
- $ git config --global user.name "xxyangyoulin"
- $ git config --global user.email "xxyangyoulin@gmail.com"
查看提交日志
- git log
- git log --pretty=oneline #简略查看信息
- git log --graph --pretty=oneline --abbrev-commit #查看分支信息
文件差别对比
git diff file
git diff filepath
工作区与暂存区比较
git diff HEAD filepath
工作区与 HEAD ( 当前工作分支) 比较
git diff --staged 或 --cached filepath
暂存区与 HEAD 比较
git diff branchName filepath
当前分支的文件与 branchName 分支的文件进行比较
git diff commitId filepath
与某一次提交进行比较
进行版本穿梭
在 Git 中, 用 HEAD 表示当前版本, 上一个版本就是 HEAD^, 上上一个版本就是 HEAD^^, 往上写成 HEAD~100.
回上一版
git reset --hard HEAD^
此时 git log 发现当前版本以后的版本消失.
想回到未来版本? 未关闭窗口之前, 找到版本号:
git reset --hard < 版本号 >
版本的跳转, HEAD 如同一个指针, 跳转不过是指针指向不同的版本.
HEAD 指向哪个版本, 当前版本定位就在哪儿.
但是找不到版本号了?
git 提供了查看你的每一次命令的命令:
git reflog
撤销修改
git checkout -- changedFile
将会回到文件最后一次 commit 或者 add 时候的状态.
已经被你 add 了?
撤销 add
git reset HEAD file
这样 add 的文件就被撤销回到工作区了.
删除文件
工作区删除了文件并且确定也要删除版本库的该文件:
git rm hello.txt
git commit -m 'rm hello'
删错了?
git checkout -- hello.txt
恢复到最新版本.
进行分支管理
创建新的分支
git branch newbranch
切换到新分支
git checkout newbranch
创建并且切换
git checkout -b newbranch
查看当前分支
git branch
合并指定分支
git merge otherbranch
合并发生冲突, 手动修改冲突文件并提交即可.
但是这种方式 Git 会尽可能的使用 Fast forward 模式, 这种情况下, 删除分支后, 分支信息会一并删除.
禁用 Fast forward 模式?
git merge --no-ff otherbranch
--no-ff 可以保留之前的分支历史, 能够更好的查看历史分支信息. 而 git merge 只保留单条分支记录.
gitmergenoff.png
删除指定分支
git branch -d otherbranch
推荐的是: 创建一个分支完成一个任务, 完成任务合并分支后删除完成任务的分支.
但是提示没有合并分支?
git branch -D otherbranch
强制删除.
储藏工作现场
工作途中, 我们在 A 分支工作, 当前任务未完成, 没有添加到暂存区, 但是需要紧急修复 bug, 使用:
git stash
储存现场, 然后切换到需要修复 bug 的分支 B.
接着, 创建修复 bug 的分支 C, 完成修复任务, 回到 B 分支, 合并 C 分支, 删除 C 分支.
然后, 回到我们正在工作的 A 分支:
git checkout A
查看我们的工作现场:
git stash list
恢复工作现场?
git stash pop
此时会恢复并且删除 stash 的内容.
不删除 stash 内容?
git stash apply < 指定 stash, 可以多次 stash>
只执行恢复操作.
但是以后想删除?
git stash drop
执行删除 stash 内容的操作.
查看远程分支
git remote git remote -v
将会显示更为详细的信息.
分支多人协作
其他人从服务器 clone 你的项目的时候, 他默认只能在本地看到 master 分支, 但是想切换其他分支进行工作?
git checkout -b work1 orgin/work1
在本地创建和远程对应的分支.
完成工作之后推送到服务器:
git push origin work1
此时其他人想要推送到 work1 就必须:
git pull
先拉取一下.
如果提示
There is no tracking information for the current branch.
此时需要指定本地 work1 和远程 work1 分支的连接关系:
git branch --set-upstream work1 origin/work1
然后再执行拉取操作.
拉取之后, 可能会发生冲突, 手动解决即可.
tag 标签的使用
tag 标签即为给 commit 操作产生的 id 值取的别名.
git tag <-s> v1.0 <-m "tag explain"> <commit id>
commit id 为空将会对应最新的 commit.
-s 秘钥签名标签.
-m 标签说明.
查看标签信息:
git tag
git show v1.0
- git clone git@serverip:/srv/sample.git
- GitHub
- git config --global alias.ma 'push origin master'
- git config --global alias.unstage 'reset HEAD'
- git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'--abbrev-commit"
来源: http://www.jianshu.com/p/f19d6b690a7e