这里推荐廖雪峰的git教程,浅显易懂,循序渐进。
https://www.liaoxuefeng.com/wiki/896043488029600
还有对git与svn的比较
https://www.cnblogs.com/Sungeek/p/9152223.html
1. 创建版本库
通过git init把某个目录变为Git可以管理的仓库,执行完会发现目录下多了.git文件。这个文件记录着该工作区的版本库。
$ git init
2.修改文件后尝试提交版本库
$ git status //查看文件变更状态
$ git diff HEAD -- //查看本地工作区和版本库最新版本的区别
$ git add //提交到暂存区
$ git commit -m "xxxxx" //提交到版本库,-m后面输入的是本次提交的说明
若要丢弃某些修改
$ git checkout -- //丢弃工作区的修改
//这里有两种情况:
//1.自修改后还没有被放到暂存区,撤销修改就回到和版本//库一模一样的状态;
//2. 已经添加到暂存区后,又作了修改,撤销修改就回到添加到暂存区后的状态
$ git reset HEAD //丢弃暂存区的修改,将修改撤回的工作区
3. 版本回退
查看版本库信息
$ git log //查看版本库信息
$ git log --pretty=oneline //查看版本库信息,以一行显示
$ git reflog //记录每一次命令,包括记录和回退
回退
在Git中,用HEAD表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本可写成HEAD~100
$ git reset --hard HEAD^ //回退到上一个版本
$ git reset --hard 1094a //回退到某一个版本,commit ID的前几位
4.将本地文件推送到远程github仓库
//首先在github上建立一个learngit远程库,再与本地关联。
$ git remote add orign [email protected]:xxxxx/learngit.git
//orign远程仓库的名字,默认
//com:个人账户名
$ git push -u name master // 将本地库推送到远程库orign上的master分支,
//第一次加-u参数
从远程克隆仓库到本地
$ git clone [email protected]:michaelliao/gitskills.git //使用ssh
$ git clone https://github.com/michaelliao/gitskills.git //使用http
更新远程仓库的代码
git pull
5.分支管理
$ git branch //查看分支
$ git branch //创建分支
$ git checkout //切换分支
$ git switch //切换分支
$ git checkout -b //创建+切换分支
$ git switch -c //创建+切换分支
$ git branch -d //删除分支
$ git merge //合并某分支到当前分支
$ git merge --no-ff -m "merge with no-ff" dev
//强制禁用Fast forward模式
$ git push origin // 将本地分支推送到远程
6.解决冲突
假设master分支要合并dev分支,但发生冲突。这时候Git用<<<<<<<,=======,>>>>>>>
标记出不同分支的内容,如:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev
手动修改冲突后,在master分支上上传,之后再进行merge。
可以使用带参数的git log 来看分支情况。
$ git log --graph --pretty=oneline --abbrev-commit
7. Bug分支
假设接到一个bug或其他任务,但当前工作还未做完,可以先将当前修改储存,等修完bug,再释放出来。
$ git stash //执行完后,git status工作区就是干净的。
$ git stash list //查看存储了那些stash
$ git stash pop //释放并删除stash
如果只想复制某次commit,而不想merge整个项目。
$ git cherry-pick //将某次commit复制到当前分支
8.标签
$ git tag //给当前分支打一个标签
$ git show //查看该标签的信息
$ git tag -a -m "xxxxxx" 1094adb
//给某次commit创建带有说明的标签,
//-a创建标签,-m添加说明
$ git tag -d //删除标签
$ git push origin //将某个标签推送到远程
$ git push origin :refs/tags///可以删除一个远程标签。
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。
9. 忽略某些文件
在仓库目录下新建一个名为.gitignore的文件,并推送到远程,则该仓库的开发者共享一套忽略规则。
注意:一定要在push文件之前创建好.gitignore文件,不然一些文件已经上传了,git就无法忽略了。
'#' 以'#'开始的行,被视为注释.
# 忽略掉所有文件名是 foo.txt的文件.
foo.txt
# 忽略所有生成的 html文件,
*.html
# foo.html是手工维护的,所以例外.
!foo.html
# 忽略所有.o和 .a文件.
*.[oa]
配置语法:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
有时候想添加某些文件发现添加不了,可能是被忽略了。可以强制添加或者去检验.gitignore的规则
$ git add -f App.class
$ git check-ignore -v App.class
.gitignore:3:*.class App.class #表示第三行规则忽略了.class文件