git一些概念
- git push origin HEAD:refs/for/master的意思
git push <remote 名字> <本地分支的名字> : <远程库的名字>
git push origin HEAD:refs/for/master
git push 肯定是推送
origin : 是远程的库的名字
HEAD: 是一个特别的指针,它是一个指向你正在工作的本地分支的指针,可以把它当做本地分支的别名,git这样就可以知道你工作在哪个分支
refs/for :意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的
refs/heads 不需要
-
git中的HEAD、head和master
https://juejin.cn/post/6844903493078089736 -
git中refs/for/mybranch 和 refs/heads/mybranch
https://blog.csdn.net/qq_31411389/article/details/77045719
简单点说,就是refs/for/mybranch需要经过code review之后才可以提交;refs/heads/mybranch不需要code review。
Gerrit 下需要这样提交:$git push origin HEAD:refs/for/mybranch
https://blog.csdn.net/qq_31411389/article/details/77045719
- Git 里面的 origin 到底代表啥意思
git branch -r 查看远端所有分支
git remote -v 查看相关的仓库的指向
origin就是一个名字,它是在你clone一个托管在Github上代码库时,git为你默认创建的指向这个远程代码库的标签,
origin指向的是repository,master只是这个repository中默认创建的第一个branch。
当你git push的时候因为origin和master都是默认创建的,所以可以这样省略,但是这个是bad practice,因为当你换一个branch再git push的时候,有时候就纠结了
- git强行拉取
第一步:git fetch --all #下载代码到本地,不进行合并操作
第二部:git reset --hard origin/vipggc_shop #(origin/vipggc_shop是你所需要更新的分支,把HEAD指向最新下载的版本)
git reset --hard:
throw away all my staged and unstaged changes, forget everything on my current local branch and
make it exactly the same as origin/master.
第三部:git pull
- git fetch 和git pull
https://juejin.cn/post/6844903921794859021
# 1
git fetch origin master:
取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:
git log -p FETCH_HEAD
# 2
git pull 的过程可以理解为下面的过程:
git fetch origin master //从远程主机的master分支拉取最新内容
git merge FETCH_HEAD //将拉取下来的最新内容合并到当前所在的分支中
- 本地分支和远程分支建立映射关系的作用
git branch --set-upstream-to origin/远程分支名 本地分支名
# 本地origin 到远端master
git push --set-upstream origin master
git push -u origin master
- 暂存区,撤销修改
1. 暂存区
每个 Git 仓库中,都有一个隐藏目录 .git 用于存放 Git 仓库的相关信息,包括暂存区(称为 stage)、自动创建的 master 分支以及指向 master 分支的 HEAD 指针。
git add 添加文件到暂存区。
git commit 提交更改,把暂存区的所有内容一次性全部提交到当前分支,清空暂存区。
2. 撤销修改
因为暂存区的存在,撤销修改分为几种情况(通过 git status 查看仓库状态时会提示相关撤销修改的命令):
修改后,文件没有放入暂存区(即文件一直在工作区):用 git checkout -- 文件名 撤销工作区的改动(回到跟版本库一样的状态,即回到最近一次 git commit时的状态,所有改动全部清除)
修改后,文件放入暂存区,且文件没有再次修改(即文件已经进入暂存区):分两步:先用 git reset <文件名> 撤销 git add 操作(此时更改仍留在工作区),再执行 git checkout -- 文件名 清除工作区的改动
修改后,文件放入暂存区,且文件再次修改:分三步:先用 git checkout -- 文件名 撤销工作区的改动,再用 git reset <文件名> 撤销 git add 操作(此时更改仍留在工作区),最后执行 git checkout -- 文件名 清除工作区的改动
通过 git checkout -- 文件名 命令可以撤销文件在工作区的修改。
通过 git reset 文件名 命令可以撤销指定文件的 git add 操作,即这个文件在暂存区的修改。
通过 git reset 命令可以撤销之前的所有 git add 操作,即在暂存区的修改。