就是在电脑里能看到的目录,init后的当前目录就是一个工作区;
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD;
config 配置有system,global(用户级别) ,local(当前仓库)三个级别,顺序为system-》global-》local,底层配置会覆盖顶层配置,分别使用--system/global/local 可以定位到配置文件。
常用配置命令:
git config –global user.name “name”
git config –global user.email 123@163.com
git config –global core.editor <>
查看配置
git config –list
git config –global –list
git config –system –list
git config –local --list
1、 创建仓库
git init
初始化后,目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
2、 也可以clone
git clone https://github.com/libgit2/libgit2 mylibgit
在当前目录下新增或修改文件后保存到版本库分为两步:
git status
git status –s #使用状态码表示文件状态
状态码解释:
A: 你本地新增的文件(服务器上没有)
C: 文件的一个新拷贝
D: 你本地删除的文件(服务器上还在)
M: 文件的内容或者mode被修改了
R: 文件名被修改了
T: 文件的类型被修改了
U: 文件没有被合并(你需要完成合并才能进行提交)
X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)
?:未被git进行管理,可以使用git add file1把file1添加进git能被git所进行管理
有一个命令用于查看已修改部分:
git diff
git diff filename
这种是比较 工作区和暂存区
比较暂存区与最新本地版本库
git diff --cached filename
比较工作区和最新版本
git diff HEAD filename
比较工作区与指定的 commit -id 的差异
git diff commit-id filename
比较暂存区与指定 commit-id 的差异
git diff --cached commit-id filename
比较两个 commit -id 的差异
git diff commit-id commit-id
版本回退
git log查看历史记录
git reset –hard commit_id回退版本
git reset
git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
git reset –-soft:回退到某个版本,只回退了commit的信息,换句话说只修改了HEAD指向,暂存和工作区没变;
git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉。
回退总结:
git reset HEAD <file>
git checkout --file
一般是在工作区删除了某个文件,有两种可能:
git rm filename
git commit
git checkout --filename
分支里有一个概念叫指针,head就是指针,指向当前分支,一般是master;
新建分支:
想要新建一个分支并同时切换到那个分支上,你可以运行一个带有 -b 参数的 git checkout 命令:
$ git checkout -b iss53
Switched to a new branch "iss53"
它是下面两条命令的简写:
$ git branch iss53
$ git checkout iss53
切换回 master 分支了:
$ git checkout master
Switched to branch ‘master‘
修改分支iss53,然后将其合并回 master 分支,可以使用 git merge。
$ git checkout master
$ git merge dev1
可以使用带 -d 选项的 git branch 命令来删除分支:
$ git branch -d hotfix
git branch –v
git branch –a
git merge有fast-Foward模式和no-ff模式:
举例来说,开发一直在m分支进行,新建一个dev的分支,并在其上提交;
回到m分支,此时m分支在创建dev分支后未进行新的提交。
此时的合并就是fast-forward。
git merge --no-ff -m "commit描述" 要合并的分支名
推荐使用no-ff模式,可以留下commit记录,便于管理。
当mater和dev各有新的提交后在合并时会产生冲突。
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,打开文件后冲突示例内容:
<<<<<<< HEAD
12.merge:change master
=======
11.merge: change branch dev1
>>>>>>> dev1
可以在修改后再add,commit
小结:
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。
git remote
git remote –v
git remote show <name> #查看详细信息
git remote add <shortname> <url>
语法:
git push <远程主机名> <本地分支名>:<远程分支名>
以下是一些示例:
$ git push origin master
上面命令表示,将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
$ git push origin :master
# 等同于
$ git push origin --delete master
上面命令表示删除origin主机的master分支。如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
$ git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。如果当前分支只有一个追踪分支,那么主机名都可以省略。
$ git push
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
$ git push -u origin master
上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
git fetch:Download objects and refs from another repository
从远程仓库取回分支和分支信息。如果只想取回特定分支的更新,可以指定分支名。
git fetch <远程主机名> <分支名>
git fetch origin master
取回来的分支可以可以在本地主机上访问(即使断网),有一点不同是在本地主机上"远程主机名/分支名"的形式读取。
比如:
git fetch 130
git checkout 130/dev
pull:Fetch from and integrate with another repository or a local branch
取回远程主机分支的更新,再与本地的指定分支合并。
一般情况下这样使用:
git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回130主机的dev分支,与本地的dev_temp分支合并:
git pull 130 dev:dev_temp
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull 130 dev
原文:https://www.cnblogs.com/wodeboke-y/p/9866728.html