从上到下的顺序,记录所进行的操作
git clone path
下载远程git仓库
修改文件
vi file
git status
修改文件后,还没有git add时,可以看到提示,有文件还没有被add
git diff
修改文件后,还没有git add时,查看不同
git add file
把文件添加到stage区
git diff
add后,就看不到不同了
当有一个文件误加入到了stage区,想要把这个文件从stage区去掉。
git reset head -- test/build.gradle
git commit -m "提交注释"
把修改进行提交了
(如果你不想先add,再进行commit的话,可以使用git commit -am "提交注释"。注意,在m前多了一个a。
使用这个命令,可以直接把已经修改过的文件自动add,然后commit。新生成的文件不在范围内)
git push
把commit的内容,push到远程仓库上去
vi file
git add
把文件添加到stage区
git diff --cached
查看git add后,添加到stage区的文件,和上次一commit的文件的不同(没有commit记录的话,就看不到)。
注意,git add后,git diff就看不到不同了。
查看工作空间中的某个文件和本地仓库上的最新文件有什么不同
(也可用git difftool命令,这个是以图形化显示)
git diff head
查看工作空间中的所有文件和本地仓库上的最新文件有什么不同
git diff HEAD^ HEAD
比较了当最近的这次提交与上一次提交之间的差异
当别人修改了远程分支后,你想把远程分支的数据下载到本地分支(本地分支已存在)
注意:这里仅仅是下载到你的本地分支上,还没有合并到你的工作目录里。
git fetch origin/master
查看本地分支和远程分支的差异
git diff master origin/master
查看提交的文件
git log --name-status -2 --pretty=oneline
(--name-status显示新增、修改、删除的文件清单,-2 显示几个提交,--pretty=oneline代表美化显示)
https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2
在 Git 中 Checkout 历史版本
git checkout -b name-of-new-branch commit_id
将某个文件的历史版本 checkout 到工作区("> </new/name/of/the/file>" 部分是新文件名,可以省略)
git show <sha1-of-a-commit>:</path/to/your/file> > </new/name/of/the/file>
切换到远程分支
git branch -a,列出所有分支名称如下:
remotes/origin/dev
remotes/origin/release
git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
如何修改本地分支的 tracking(在 pull 时,不指定分支就直接从 tracking 分支上 pull)
1,查看本地分支的 tracking
git branch -vv # 查看分支的 tracking
显示:4.0.0.cp 66a1de8 [origin/release-4.0.0-incubating: ahead 13] 增加注释
2,修改本地分支的 tracking
git branch --set-upstream 4.0.0.cp remotes/origin/4.0.0.cp
显示:
The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
Branch 4.0.0.cp set up to track remote branch 4.0.0.cp from origin.
3,再次查看分支 tracking
* 4.0.0.cp 66a1de8 [origin/4.0.0.cp: ahead 1, behind 2] 增加注释
---------------------------------------------------
仓库名例如:origin/master,中的origin是什么意思?
它是一个代表“远程的”标记名称,后面是真正的仓库名称。
[origin/master]在git里被称作“远程分支”。origin是远程的标记名称,master被称为“分支”。
(“远程名称”是一个代码仓库别名,和本地目录或URL是一个含义,你可以通过"git remote"命令自由定义额外的“远程名称”。但“git clone”命令默认使用的是“origin”这个名称。)
使用Eclipse插件时,为什么没有缓存区(或叫暂存区,就是Stage区)的概念?
缓存区的目的就是让你选择,你要commit哪些代码。用Eclipse进行commit时,会出来一个对话框让你选你要commit哪些代码。这个对话框就是缓存区的概念。
如何在本地新建立一个工程,上传到远程仓库中?
先在远程仓库中建立一个分支,例如test(https://github.com/yourname/test.git)
然后,在本地建立文件夹和文件,最后上传:
mkdir my-project
cd my-project
git init
git add README.md
git commit -m "首次提交代码"
git remote add origin https://github.com/wteam-xq/testGit.git
git push -u origin master
(git push -u 代表push的同时会指定当前分支的upstream)
(什么是upstream:http://blog.angular.in/git-pushmo-ren-fen-zhi/)
git push和git fetch/ git merge的区别
在远程分支和本地分支没有冲突时,git push = git fetch + git merge
git fetch 是把远程分支上的内容取下来,放到本地分支上(并不放到工作区)。
git merge 是把本地分支上内容,合并到工作工作区(就是你实际看到代码的区域)
用git pull的话,会自动完成上面的步骤。
在远程分支和本地分支发生冲突时,git push = git fetch + git merge + git stash + git stash pop
在git fetch之后,如果代码有冲突的,做git merge的话,会报错:
error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.java
Please, commit your changes or stash them before you can merge.
Aborting
这时,需要使用git stash命令把代码暂时保存起来,这时工作区的代码会保存到栈上,然后本地工作区间的代码跟本地仓库代码会同步,
然后使用git merge命令,把本地分支上的代码更新到工作区(工作区的代码变成了本地分支的代码)
再用git stash pop把刚才保存的代码取出来,并合并到工作区上,这时代码出错了冲突:
Auto-merging XXX.gradle
CONFLICT (content): Merge conflict in XXX.gradle
再用编辑器,把文件内容修改一下,并保存,就完成了。
上面的并于冲突的过程,如果用git pull的话,系统会自动完成上面的步骤。
参考:
http://www.jianshu.com/p/898e766d22e1
git 取消修改,恢复版本 命令大全:http://blog.csdn.net/cankingapp/article/details/18312117
在 Git 中 Checkout 历史版本:https://liam0205.me/2015/04/29/git-checkout-history-version/