git操作
一、上传项目到git
1、登录github,点击start a project跳转到Create a new repository页面,填写项目名称,点击Create repository按钮
2、进入本地项目目录下,右键点击git bash here,敲入以下命令即可
// 把这个文件夹变成Git可以管理的仓库
git init
// 把项目添加到仓库(或git add .把该目录下的所有文件添加到仓库,注意点是用空格隔开的)
// 在这个过程中你其实可以一直使用git status来查看你当前的状态
git add .
// 把项目提交到本地仓库
git commit -m "注释"
// 与github(远程仓库)建立联系
// git remote rm origin 删除联系 git remote -v 已存在远程分支
git remote add origin https://github.com/husterlihuijuan/study.git
// 把本地库study的所有内容推送到远程仓库(也就是Github)上,此后,每次本地提交后,
// 只要有必要,就可以使用命令git push -origin master推送最新修改
git push -u origin master
3、至此项目上传完成
二、修改代码提交到git
1、修改代码后提交
- 如果是在master上开发:
git commit -am '测试123' // 提交到master分支
git push -u origin master // 提交本地master分支到远程仓库
- 如果是在分支上开发:
git commit -am '测试123' // 提交到本地分支
git checkout master // 切换到master
git pull origin master // 将master代码更到最新
git merge note // 合并分支到master,合并冲突时git merge --abort 回退,
// 或者在当前分支上(master),找到冲突文件,直接修改冲突代码
git push -u origin master // 提交本地master分支到远程仓库
git log --oneline --graph // 查看提交历史分支
2、创建分支
git branch note //创建note分支
git checkout note //切换到note分支
git branch -d note //删除分支note
3、把分支添加到github上
git push --set-upstream origin note //note分支已经上传到了 github
三、删除github上某个分支的文件夹
在github上只能删除仓库,却无法删除文件夹, 所以只能通过命令来解决,如下:删除master分支下的doc文件夹
git pull origin master //将远程仓库里面master分支的项目拉下来
dir //查看master分支有哪些文件夹
git rm -r --cached doc //删除master分支下的doc文件夹
git commit -m '删除了doc' //提交,添加操作说明
git push origin master// 将本次更改更新到github项目上去
(每次增加文件、删除文件或修改文件,都要add、commit 然后直接 git push origin master,就可以同步到github上了)
四、从github上clone项目到本地
git clone https://github.com/husterlihuijuan/reacter.git
此时 在所选的盘里会自动有一个reacter文件夹,说明已经克隆到本地,但此时该目录 并不是git可以管理的仓库
进入该目录,在项目目录下
D:\reacter>git init //让该reacter目录变成git可以管理的仓库,且此时已经和远程仓库自动建立好了联系
但此时 只有一个master分支,若你需要另外一个分支,在另外一个分支上工作,把另外一个分支也克隆下来,如,你需要 greeting分支
D:\reacter>git checkout -b greeting origin/greeting //此时你就把greeting分支克隆到本地了,通过 git branch 可以查看
接下来就可以在本地进行工作了
五、github回退commit内容
git log // 查找提交日志log,找到对应的commit 版本号
git reset --soft xxxxxxxxxxxxxxxx // xx 为版本号
注:
git reset --soft // 回退到某个版本,新的变更不会丢失,只回退了commit的信息,
// 不会恢复到index file一级。如果还要提交,直接commit即可
git reset --hard // 彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉
git reset --mixed // (默认)保留工作目录,并且清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。
// 简而言之,就是「把所有差异都混合(mixed)放在工作目录中」
详细解释:https://www.jianshu.com/p/c2ec5f06cf1a
六、查看远程分支
git remote 不带参数,列出已经存在的远程分支
git remote -v // --verbose 列出详细信息,在每一个名字后面列出其远程url,
// 此时, -v 选项(译注:此为 –verbose 的简写,取首字母),显示对应的克隆地址。
git remote add url 添加一个远程仓库
七、其他常用命令
git fetch --all // 将远程主机的更新全部取回本地
git merge origin/master // 在本地(当前)分支上合并远程分支
git merge --abort // 终止本次merge,并回到merge前的状态
git pull origin master // 从远程获取最新版本并merge到本地等同于
// git fetch origin master + $ git merge origin/master(前者更安全一些)
git push origin master // 将本地master分支推送到远程origin主机的master分支
git log xx // 查看xx文件的commit记录
git log -p xx // 查看xx文件每次提交的diff
git log --pretty=oneline xx // 查看xx文件提交的历史记录(只显示哈希值和提交说明)
git log --pretty=raw // 查看commit之间的父子关系(root commit是没有父提交的)
git log --graph // 查看当前分支commit生成的树状图
git diff HEAD HEAD^1 -- xx // 查看xx文件不同版本之间的差异
git diff HEAD~1 // 显示父节点的提交
git diff --staged/--cached // 显示暂存区和上一次提交的不同,git add之前忘diff的后悔药(👍)
git show --stat // 查看最后一次的修改
git show HEAD // 查看指定版本的修改(可省略HEAD,默认当前版本) 同上
git show HEAD xxx // 查看指定版本xx文件的修改(可省略HEAD,默认当前版本)
git reset --hard HEAD // 回滚到指定版本,同时清空工作目录的所有改动
git reset --soft HEAD // 回滚到指定版本,同时保留工作目录和暂存区的内容,并把重置的位置所导致的新的文件差异放进暂存区(👍)
git reset --mixed HEAD // (默认)回滚到指定版本,同时保留工作目录的内容,并清空暂存区(👍)
git reset --hard origin/master // 将本地master与远程master同步
注:
git中‘~’和‘^’的区别:
(<commit>|HEAD)^n // 指的是HEAD的第n个父提交,可以通过在“^”后面跟上一个数字,表示第几个父提交,“^”相当“^1”。
// 例如:HEAD^2 表示HEAD的第二次父提交。
(<commit>|HEAD)~n // 指的是HEAD的第n个祖先提交,
// 可以通过在“~”后面跟上一个数字,表示第几个祖父提交,“~”相当“~1”,“~n”相当于连续的<n>个“^”。
// 例如:HEAD~2 表示HEAD的第一个父提交的第一个父提交。
等式1:HEAD~ === HEAD^ === HEAD^1
等式2:HEAD~2 === HEAD^^ === HEAD^1^1