一、github的工作流
我们的本地仓库由git维护的三棵"树"组成。第一个是我们的工作目录,他持有实际文件;第二个是
缓存区,它像个缓存区域,临时保存你的改动;最后是HEAD,指向你最近一次提交后的结果。
1.1、创建公钥(本地仓库与远程仓库建立连接使用的凭证)
ssh-keygen -t rsa -C “你的邮箱” 创建连接公钥
1.2、设置git的用户名和邮箱(提交代码时候会显示这个用户名)
git config --global user.name "youname"
git config --global user.email "youeamil@email.com"
1.3、查看当前仓库配置信息
git config --list
二、常用命令
1、git init
初始化一个本地的空git仓库
2、git log
查看本地git日志
2.1、git log remotes/origin/远程分支名
查看远程仓库git日志
3、git clone
3.1、复制一个远程仓库的版本
git clone 仓库地址
3.2、克隆指定分支下得代码
git clone -b 分支名 仓库地址
4、git status
查看仓库的状态。工作树和仓库再被操作的过程中,状态会不断发生变化。
3、添加到缓存区
git add <filename>
git add *
4、提交改动到本地仓库
git commit -m "代码提交的说明信息"
5、同步本地仓库到远程github仓库
git push -u origin master(master换成你想要推送的任何分支)
git push --force origin master 强制推送到远程(一般用于版本回退后的push)
6、在未克隆现有仓库时,将现有的仓库连接到某个远程服务器,如此就能够将你的改动推送到所添
加的服务器上去了。
git remote add origin <server>
7、branch(分支)
查看本地分支
git branch
查看所有分支
git branch -a
创建名为"feature_x"的本地分支,并切换过去:
git checkout -b feature_x
以远程仓库的dev分支为副本,创建本地分支dev
git checkout -b dev origin/dev
切换回主分支
git checkout master
删除本地分支
git branch -d feature_x
删除远程分支
git push origin --delete 分支名
git push origin :分支名
将分支推送到远端仓库(如果不推送到远端仓库,该分支别人是看不见的)
git push origin <branch>
8、更新本地仓库至最新改动
git pull
9、合并其他分支到自己的当前分支
git merge <branch>
10、自动合并改动失败时,会导致文件冲突(conflicts),这时需要人工手动合并这些冲突。改完以后,执行如下命令以将它们标记为合并成功:
git add <filename>
11、在合并改动之前,也可以使用如下命令查看:
git diff <source_branch> <target_branch> ——查看更改前后的差别
a、查看工作树(当前的workspace)和暂存区(已经add了)的差别
git diff
b、查看工作树和最新提交(已经commit了)的差别
git diff HEAD
tips: 在执行git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交。这里的HEAD是指向当前分支中最新一次提交的指针。
12、git checkout -- 文件名
还原本地修改;把file文件在工作区的修改全部撤销,这里有两种情况: 一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; 一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。 命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令;
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- <filename>。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
git checkout .(注意这里有个英文状态下的点符号) 撤销所有未add的修改
13、git reset
13.1、git reset --hard commit_id(通过git log可以得到commit_id相关信息,如果本地有提交的
话)
完成撤销,同时将代码恢复到前一commit_id 对应的版本。
13.2、git reset commit_id(commit id前6位即可)
完成Commit命令的撤销,但是不对代码修改进行撤销,可以直接通过git commit 重新提交对本地代码的修改。
13.3、如果你想丢弃你所有的本地改动与提交,可以到服务器上获取最新的版本并将你本地主分支指向到它:
获取服务器上最新的版本
git reset --hard origin/master
14、git stash save '这里是说明文字'
保存当前工作状态(可以理解为游戏存档);
场景一: 想切换分支,但是你还不想提交你正在进行中的工作;所以你储藏这些变更。为了往堆栈推送一个新的储藏,只要运行 git stash;
14.1、查看已保存的工作进度(查看游戏所有的存档记录)
git stash list
14.2、读取工作进度(读取游戏存档)
git stash apply
读取指定名字的进度
git stash apply(2)
场景2: 远程的仓库已经修改了文件b,本地的仓库也修改了文件b,此时文件b在本地仓库和远程仓库中不是同一个版本了,这时候,我使用pull,会报错: Your local changes would be overwritten by merge. Commit, stash or revert them to proceed. 我的解决方式: 先git stash change:保存本地当前工作进度; 然后,git pull: 获取远程仓库最新代码; 最后,git stash apply:读取本地工作进度; 最后,commit 和push。ok; 这个就像我们玩游戏一样,玩到一半了,保存游戏进度,下次打开游戏,再读取进度
5、文件的三种状态
已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库 中了;已修改表示修改了某个文件,但还没有提交保存;
已暂存表示把已修改的文件放在下次提交时要保存的清单中。
6、工作目录,暂存区域,以及本地仓库
每个项目都有一个 Git 目录(译注:如果 git clone
出来的话,就是其中 .git
的目录;如果git clone --bare
的话,新建的目录本身就是 Git目录。),它是 Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。
从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从 Git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑。
所谓的暂存区域只不过是个简单的文件,一般都放在 Git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。
基本的 Git 工作流程如下:
1. 在工作目录中修改某些文件。
2. 对修改后的文件进行快照,然后保存到暂存区域。
3. 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。
15、git fetch
git fetch origin master
将本地主分支指向服务器最新的版本
应用场景一:当团队其他同事新建了一个远程分支,在本地使用git branch -a却看不到时,使用git fetch取回所有分支的更新
,然后使用git branch -r 就可以看到同事新建的远程分支了