已提交: 数据已经安全地保存在本地数据库中
已修改: 修改了文件,但还没保存在数据库中
已暂存: 对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
Git 仓库目录:Git 用来保存仙姑的元数据和对象数据库的地方;拷贝的就是这里的数据.
工作目录: 对项目的某个版本独立提取出来的内容。这些从 Git仓库的压缩数据库中提取出来的文件,放在磁盘上供修改
暂存区域:是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。
基本的 Git 工作流程如下:
git 常用命令
git init # 初始化git仓库, 会创建一个名为.git 的子目录。但尚未跟踪任何文件。
git add file # 跟踪
git commit -m 'inital project version' 提交
git clone # 区别于 checkout, 会对所有数据进行完整复制,包括整个项目历史中每个文件的所有历史版本都拉取下来。
状态都是已跟踪未修改。
git status #查看文件的状态, -s 得到简短输出
git diff #查找具体修改了什么地方,你可能通常会用它来回答这两个问题:当前做的哪些更新还没有暂存?有哪些
#更新已经暂存起来准备好了下次提交?只显示尚未暂存的改变
#若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。或者 git diff --staged.
git rm #要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可
#以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
git log # 查看提交历史
git log --pretty=oneline # 单行显示
git log --since=2.weeks # 限制显示时长
git reset HEAD <file> # 撤销操作
gitignore
## 查看所有分支
git branch
## 创建新分支
git branch test
### 切换新分支
git checkout testing
## 创建并切换
git checkout -b testing
### 合并操作
git checkout master
git merge testing
## 删除分支
git brach -d testing
## 合并冲突处理
## 手动处理完冲突后,执行git add 将每个文件标记为冲突已解决的状态。
git status
远程引用是对远程仓库的引用。
git ls-remote (remote) #显式地获得远程引用的完整列表,或者通过
git remote show (remote) #获得远程分支的更多信息
远程跟踪分支是远程分支状态的引用。以 (remote)/(branch) 命名。
如果你想要看你最后一次与远程仓库 origin通信时 master 分支的状态,你可以查看 origin/master分支。你与同事合作解决一个问题并且他们推送了一个 iss53分支,你可能有自己的本地 iss53分支;但是在服务器上的分支会指向 origin/iss53的提交。
远程仓库名字 “origin” 是当你运行 git clone时默认的远程仓库名字。如果你运行 git clone -o booyah,那么你默认的远程分支名字将会是 booyah/master。
抓取
如果要同步服务器上的工作,运行 git fetch origin, 命令会查找 origin 是哪一台服务器,从中抓取本地没有的数据数据,更新本地数据库,并移动 origin/master 指针指向新的位置。
git fetch # 从服务器抓取本地没有的数据
git pull # 等于 git fetch then git merge
推送
git push (remote) (branch)
git push [remote-name] [local-branch]:[remote-branch]
git push origin dev:master # 将本地的 dev 分支推送到远程的 master 分支
git push origin serverfix # 推送本地的 serverfix 分支来更新远程仓库的 serverfix 分支; 等同于 git push origin serverfix:serverfix
跟踪分支
从一个远程跟踪分支检出一个本地分支会自动创建一个叫做 “跟踪分支”(有时候也叫做 “上游分支”)。跟踪分支是与远程分支有直接关系的本地分支。如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。
当克隆一个仓库时,它通常会自动地创建一个跟踪 origin/master的 master分支。然而,如果你愿意的话可以设置其他的跟踪分支 - 其他远程仓库上的跟踪分支,或者不跟踪 master分支。最简单的就是之前看到的例子,运行 git checkout -b [branch] [remotename]/[branch]。这是一个十分常用的操作所以 Git 提供了 --track快捷方式:
git checkout -b [branch] [remotename]/[branch]
git checkout --track origin/serverfix
git checkout -b sf origin/serverfix # 本地分支为不同名字 sf
git branch -vv # 将所有本地分支列出来,并可以看到每一个分支正在跟踪哪个远程分支以及领先或落后情况
上游快捷方式
当设置好跟踪分支后,可以通过 @{upstream}或 @{u}快捷方式来引用它。所以在 master 分支时并且它正在跟踪 origin/master时,如果愿意的话可以使用 git merge @{u}来取代 git merge origin/master。
删除远程分支
git push origin --delete serverfix
将本地已有文件夹 push 到远程文件夹里面
git init # 将当前文件夹初始化为git 文件夹
git remote add origin <git_url>
git pull origin master --allow-unrelated-histories
git push -u origin master
将本地已有文件夹 push 到远程文件夹里面
git submodule add <git_url> <本地地址>
远程分支拉到本地仓库
git checkout --track origin/分支名
git branch develop # 创建分支
git checkout develop 切换到该分支下
git push --set-upstream origin <分支名称> 把分支提交到远程仓库中
git push --set-upstream origin develop
指定分支克隆
git clone -b 分支名称 地址
git checkout --track origin/feature/home
git pull origin master
合并其他分支代码至master分支
1.当前分支所有代码提交
# 将所有代码提交
git add .
# 编写提交备注
git commit -m "修改bug"
# 提交代码至远程分支
git push origin dev
2.切换当前分支至主干
# 切换分支
git checkout master
# 如果多人开发建议执行如下命令,拉取最新的代码
git pull origin master
3.合并分支代码并提交
git merge dev
# merge完成后可执行如下命令,查看是否有冲突
git status
git push origin master