Git status 查看文件修改状态和提交状态
modified: a.txt //文件有改动
//管理修改
Git diff 文件名 查看文件修改的内容
//版本回退
Git log 查看最近的提交记录
Git log --pretty=oneline //是提交记录显示在一行
Git reset --hard HEAD^ //回退到上一个版本
Git reset --hard 版本号 //会提到哪个版本
Git reflog 用来记录你的每一次命令 会显示commit_id 可以根据commit_id 恢复到想要回退的版本
//撤销修改
Git checkout -- a文件名 放弃修改的文件
//删除文件
Rm 文件名 //删除文件
Git rm 文件名 // 把版本库中的文件删除 如果删除了可以使用git reset --hard HEAD^ 进行恢复
如果使用 rm误删文件可以使用 git checkout -- 文件名 进行恢复
//本地添加远程仓库
git remote add origin https://github.com/MAZHAL/mahzal.github.com.git
git push -u origin master
查看添加的远程库
Git remote -v
修改远程库
是在config中添加
//git服务器上
Git clone git@server:/home/git/xxx.git
//创建分支并切换分支
git checkout -b dev
Git branch dev
Git checkout dev
查看分支
Git branch
//切换分支
Git checkout 分支名
//把创建的分支合并到 主分支
Git merge dev
删除分支
Git branch -d dev
丢掉一个没有合并过得分支
用git branch -D 分支名
//冲突 当 分支提交后 切换到主分支 主分支在合并前也有提交
会出现冲突
$ git merge dev
Auto-merging d.txt
CONFLICT (content): Merge conflict in d.txt
Automatic merge failed; fix conflicts and then commit the result.
git status //可以定位是哪个文件冲突了
手动解决冲突
添加并提交 ,合并成功
//查看分支结构
$ git log --graph --pretty=oneline --abbrev-commit
* e8d8656 解决冲突了
|\
| * 53e8ff6 dev提交了
* | 64e805c master提交了
|/
* f7302f1 dev 提交了
* a508d55 sss
* 9357507 ss
* 5ac9390 提交a.txt
分支管理策略
Git 默认在合并分支 后删除分支 会丢失已删除分支的信息
使用带参数的--no-ff 方式合并则不会丢失信息
git merge --no-ff -m "merge with no-ff" dev
//查看分支历史
git log --graph --pretty=oneline --abbrev-commit
* aa90227 merge with no-ff
|\
| * 0a9cfa9 sss
|/
* 41304c0 冲突解决了
* e8d8656 解决冲突了
|\
| * 53e8ff6 dev提交了
* | 64e805c master提交了
|/
* f7302f1 dev 提交了
* a508d55 sss
* 9357507 ss
* 5ac9390 提交a.txt
分支策略 master分支是十分稳定的
应该创建一个dev分支作为发用
bug 分支
//当前工作未完成未提交保存当前分支的工作现场
git stash
当bug分支合并完成之后
再切换回来
用git stash list 查看分支保存的工作现场
//显示 stash@{0}: WIP on dev: 6224937 add merge
git stash apply 进行恢复
同时要把保存的现场请掉git stash drop
如果只保存一个现场可以用 git stash pop进行恢复
如果有多个
则需要
恢复指定的git stash apply stash@{0}//(1,2,3等具体的statsh)
在进行删除当前选择的git stash drop stash@{0} (1,2,3等具体的statsh)
多人协作
查看远程库的详细信息
Git remote
Git remote -v //显示更详细的信息
推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
标签管理
正式上线要打一个合适的标签比如 v1.2
打标签
切换到分支并为这个分支打标签
git tag v1.0
查看标签
git tag
默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?
方法是找到历史提交的commit id,然后打上就可以了:
$ git log --pretty=oneline --abbrev-commit
git tag v0.9 commit_id
再用命令git tag查看标签
git show 标签名查看标签的详细信息
还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164
用命令git show <tagname>可以看到说明文字:
$ git show v0.1
tag v0.1
Tagger: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 26 07:28:11 2013 +0800
version 0.1 released
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
如果标签打错了,也可以删除:
$ git tag -d v0.1
//忽略文件
//检查忽略文件是否有问题
git check-ignore
本地库客服务器上的库有所不同
需要
git pull --rebase origin master 后才能提交
比如,要取回origin主机的next分支,与本地的master分支合并,需要写成下面这样 -
$ git pull origin next:master
如果远程分支(next)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写为:
$ git pull origin next
面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再执行git merge。
$ git fetch origin
$ git merge origin/next