git常用命令:
- git init //初始化本地git环境
- git clone XXX//克隆一份代码到本地仓库
- git pull //把远程库的代码更新到工作台
- git pull --rebase origin master //强制把远程库的代码跟新到当前分支上面
- git fetch //把远程库的代码更新到本地库
- git add . //把本地的修改加到stage中
- git commit -m 'comments here' //把stage中的修改提交到本地库
- git push //把本地库的修改提交到远程库中
- git branch -r/-a //查看远程分支/全部分支
- git checkout master/branch //切换到某个分支
- git checkout -b test //新建test分支
- git checkout -d test //删除test分支
- git checkout -b 分支 origin/分支 //从远程origin获取分支到本地
- git checkout -b 分支 upstream/分支 //从远程upstream获取分支到本地
- git checkout --patch 分支 fileName //获取本地分支上(或者远程的分支)的文件补丁到该分支,如果有不同会让确认是否接收这个不同
- git merge master //假设当前在test分支上面,把master分支上的修改同步到test分支上
- git merge tool //调用merge工具
- git stash //把未完成的修改缓存到栈容器中
- git stash list //查看所有的缓存
- git stash pop //恢复本地分支到缓存状态
- git blame someFile //查看某个文件的每一行的修改记录()谁在什么时候修改的)
- git status //查看当前分支有哪些修改
- git log //查看当前分支上面的日志信息
- git diff //查看当前没有add的内容
- git diff --cache //查看已经add但是没有commit的内容
- git diff HEAD //上面两个内容的合并
- git reset --hard HEAD //撤销本地修改
- echo $HOME //查看git config的HOME路径
- export $HOME=/c/gitconfig //配置git config的HOME路径
- git remote add upstream url //添加上游远程主干仓库
- git fetch upstream //从上游获取代码
- git merge upstream/master或者其他分支 这里写某个分支名称 //合并上游某个分支和本地的代码
团队协作git操作流程:
- 克隆一个全新的项目,完成新功能并且提交:
-
- git clone XXX //克隆代码库
- git checkout -b test //新建分支
- modify some files //完成修改
- git add . //把修改加入stage中
- git commit -m '' //提交修改到test分支
- review代码
- git checkout master //切换到master分支
- git pull //更新代码
- git checkout test //切换到test分支
- git meger master //把master分支的代码merge到test分支
- git push origin 分支名//把test分支的代码push到远程库
- 目前正在test分支上面开发某个功能,但是没有完成。突然一个紧急的bug需要处理
-
- git add .
- git stash
- git checkout bugFixBranch
- git pull --rebase origin master
- fix the bug
- git add .
- git commit -m ''
- git push
- git checkout test
- git stash pop
- continue new feature's development
git撤回提交:
- git 撤回 本地 add/commit:
-
-
放弃本地更改,未add,未commit
git checkout filename
注:与git checkout branch 区别
- 已add未commit的更改
git reset HEAD filename ---------------只是撤销add 操作,本地修改不会丢失
- 已经commit的的撤回
- git reset commit_id (回退到上一个 提交的节点 代码还是原来自己修改的)
- 或者是git reset --soft HEAD^ (回退到上一个 提交的节点 代码还是原来自己修改的)
-
放弃已经commit的修改(--hard 都是强制修改)
git reset --hard HEAD^ ----------------回到上次commit的状态
git reset --hard HEAD^^ ------------------回到前两次提交
git reset --hard commitid ---- (回退到上一个commit节点, 代码也发生了改变,变成上一次的,本次的修改也丢了)
-
放弃已经push的修改
1>git reset HEAD --------------------只是把HEAD指针向后移动
2>git revert commitID --------------------提交一个新的版本,将之前的版本覆盖当前的版本,版本会递增,不影响想要放弃的已push的修改,而revert之后的版本递增,但是push的内容还在,只是存在于上一个版本
git reflog -------------查看commit日志
git reset --hard commitid ---------------回到commitid
-
git revert 用法
git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的提交
* git revert HEAD 撤销前一次 commit
* git revert HEAD^ 撤销前前一次 commit
* git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,
版本会递增,不影响之前提交的内容--------------------------------------------------------------------------------------------------------------------------------------------
git revert 和 git reset的区别
1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
2. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
3. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
-
git 撤回远程origin的push
1.撤销提交信息
首先,通过git log
查看提交信息,以便获取需要回退至的版本号:
$ git log
commit a44822002522f2ab1e3a5e2a1cec00a7d3d02185 (HEAD -> master, origin/master, origin/HEAD)
Author: hanchao5272 <[email protected]>
Date: Sun Mar 4 11:14:55 2018 +0800
CSDN-java反射06-成员变量Field-代码优化
commit aa909cff2239536df14820fe086d96305b24e9f1
Author: hanchao5272 <[email protected]>
Date: Sat Mar 3 23:43:03 2018 +0800
CSDN-java反射-修饰符-代码优化
我们需要撤销CSDN-java反射06-成员变量Field-代码优化这次提交,所以需要回退至的版本是CSDN-java反射-修饰符-代码优化,即需要回退至的版本号是:aa909cff2239536df14820fe086d96305b24e9f1。
然后,通过git reset –soft <版本号>重置至指定版本的提交,达到撤销提交的目的:
$ git reset --soft aa909cff2239536df14820fe086d96305b24e9f1
参数soft指的是:保留当前工作区,以便重新提交
还可以选择参数hard,会撤销相应工作区的修改,一定要谨慎使用
然后,通过git log
确认是否成功撤销:
$ git log
commit aa909cff2239536df14820fe086d96305b24e9f1 (HEAD -> master)
Author: hanchao5272 <[email protected]>
Date: Sat Mar 3 23:43:03 2018 +0800
CSDN-java反射-修饰符-代码优化
已经成功撤销。
2.撤销
通过git push origin master –force强制提交当前版本号,以达到撤销版本号的目的:
$ git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
To github.com:hanchao5272/myreflect.git
+ a448220...aa909cf master -> master (forced update)
必须添加参数force进行强制提交,否则会提交失败,并报错:
$ git push origin master
To github.com:hanchao5272/myreflect.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to '[email protected]:hanchao5272/myreflect.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
报错原因:本地项目版本号低于远端仓库版本号。
3.修改代码,重新提交和推送
//修改代码,添加修改
git add .
//重新提交
git commit -m "CSDN-java反射06-成员变量Field-代码优化"
//重新推送
git push origin master