git diff #是工作区(work dict)和暂存区(stage)的比较
git diff --cached #是暂存区(stage)和分支(master)的比较
Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。
$ git add readme.txt
$ git commit -m "append GPL" #-m为添加评论
查看日志 git log
$ git log --pretty=oneline
回退到上一个版本 git reset
$ git reset --hard 3628164
关了电脑,想回到上一个版本
Git提供了一个命令git reflog用来记录你的每一次命令:
$ git reflog
工作区与缓存区的区别见图
输出文件内容
cat readme.txt
撤销修改
- 没有添加到缓存区,丢弃工作区的修改
$ git checkout -- readme.txt #命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,
- 已经添加到缓存区了
git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区
$ git reset HEAD readme.txt
删除文件
- 真的要删除文件
$ rm test.txt
$ git rm test.txt
$ git commit -m "remove test.txt"
- 另一种情况是删错了
$ git checkout -- test.txt
# git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
最简单的流程:
1. git clone https//...
2. 编辑要该的内容
3. git add 文件名
4. git commit -m 'comment'
5. git push https//...
创建与合并分支
创建dev分支,然后切换到dev分支
$ git checkout -b dev #命令加上-b参数表示创建并切换
查看当前分支
git branch命令查看当前分支:
$ git branch
* dev
master
git branch命令会列出所有分支,当前分支前面会标一个*号。
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
git checkout master
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
分支使用步骤:
1.git checkout -b dev 创建分支
2.在分支上修改文件
3.git add readme.txt
4.git commit -m 'modify readme'
5.git checkout master 切换回master分支
6.git merge dev 合并分支
7.git branch -d dev 删除分支 -D 大写的D为强行删除
8.git branch 查看分支
当不用fast forword 模式合并时,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
此时merge步骤
1.git cheakout -b dev
2.修改文件
3.git add readme.txt
4.git commit -m 'modify readme'
5.git checkout master
6.git merge --no-ff -m "merge with no-ff" dev (--no-ff 非快速模式,因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。)
7.git branch -d dev
8.git branch
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作git stash
修复好bug后,用git stash pop
,恢复的同时把stash内容也删了
推送分支
git push origin master
git push origin dev
在分支上打标签
$ git tag v0.9 6224937 (6224937为版本号)
如何让fork来的repo保持更新
1. git remote add upstream https//..
2. git fetch upstream
3. git rebase upstream/master #将所有更新推到自己的远端repo
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。