一、上传本地项目到gitLab
1.先记录个人信息
git config --global user.name "xxx"
git config --global user.email "xxx@xxx"
2.上传
// 1. git add : 添加到暂存区
git add xxx文件
git add -A // 添加所有文件(通常改动较多可以直接使用这句命令)
// 2. git commit -m "备注信息":添加到数据仓储
git commit -m "备注信息" // 添加 -m 选项,将提交信息与命令放在同一行
git commit -a -m "备注信息"// 加上 -a 选项,就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤(但是未经过git add步骤的新增的文件,就不可以,需要先git add)
// 3. git push 推送到远程服务器 gitLab
git push [地址] master
// 推送本地分支到远程
git push origin <分支名>
git status // 显示工作目录和暂存区的状态
// 可以看见,执行 git add 前后的状态对比
二、下载远程服务器的项目到本地
1.将其他仓库克隆到本地
包括被clone仓库的版本变化
git clone <版本库的url>
// HTTPS
git clone https://github.com/tensorflow/tensorflow.git
// SSH
git clone git@github.com:tensorflow/tensorflow.git
// 如果本地目录不想与远程仓库同名:
git clone <版本库的网址> <本地目录名>
2.拉取远程分支更新到本地仓库
比如远程仓库里的学习资料有了新内容,需要把新内容下载下来的时候,就可以使用git pull命令。事实上,git pull是相当于从远程仓库获取最新版本,然后再与本地分支merge(合并)。
即:git pull = git fetch + git merge
注:git fetch不会进行合并,执行后需要手动执行git merge合并,而git pull拉取远程分之后直接与本地分支进行合并。更准确地说,git pull是使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中。
git pull <远程主机名> <远程分支名>:<本地分支名> // 使用
// 举例:将远程主机origin的master分支拉取过来,与本地的 master 分支合并。
git pull origin master
以上的git pull操作如果用git fetch来表示:
git fetch origin master:tmp // 本地新建temp分支,并将远程的master分支下载到temp
git diff tmp // 可以比较本地代码与刚刚从远程下载下来的代码的区别
git merge tmp // 合并temp分支到本地的master分支
git branch -d temp // 最后可删除temp分支
三、本地分支的创建、切换、删除
1.查看分支信息
git branch // 查看本地分支
git branch -r // 查看远程分支
git branch -a // 查看所有分支(本地+远程),只有分支名称
git branch -v -a // 查看所有分支,有分支名称+备注信息
2.新建分支,并切换到新的分支
git checkout -b develop
// 相当于下面两步:
git branch develop // 创建 develop
git checkout develop // 切换到 develop
问:如何切换分支而又不用带上刚刚修改的文件?
在使用 git 的时候,我们往往使用 branch 解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码,如果发现原有的分支上有个不得不修改的 bug,我们往往会把完成一半的代码 commit 提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往 log 上会有大量不必要的记录。
其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急 Bug,那么使用' git stash ' 命令就可以将你当前未提交到本地(和服务器)的代码推入到 Git 的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完 Bug,提交到服务器上后,再使用 ' git stash apply ' 将以前一半的工作应用回来。
也许有的人会说,那我可不可以多次将未提交的代码压入到栈中?答案是可以的。当你多次使用 'git stash' 命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑。
git stash list // 将当前的 Git 栈信息打印出来
git stash apply stash@{1} // 应用指定版本的工作 stash@{1}
git stash drop stash@{1} // 移除指定版本
git stash clear // 清空栈信息
3.合并分支
3.1 修改文件后,保存修改
git commit -a -m "修改一些细节" // 自动把所有已经跟踪过的文件暂存起来一并提交
3.2 转换到master,合并develop
// 切换到 master分支
git checkout master
// 对 develop 分支进行合并
git merge --no-ff develop // --no-ff 执行正常合并
解释一下 --no-ff 参数。默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支
使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。
- git merge –no-ff 可以保存你之前的分支历史。能够更好的查看 merge历史,以及branch 状态。
- git merge 则不会显示 feature,只保留单条分支记录
3.3 查看未合并工作的分支
git branch --no-merged
4.删除分支 -d
git branch -d <branchName>