reset
- 恢复index区,批量就是”.”
- 修改了branch(checkout不修改)
已经push到远程仓库的commit不允许reset。
已经push到远程仓库的commit不允许reset。
如果commit已经被push到远程仓库上了,也就意味着其他开发人员就可能基于这个commit形成了新的commit,这时你去reset,就会造成其他开发人员的提交历史莫名其妙的丢失,或者其他灾难性的后果。
reset三种模式【注意reset —hard会丢失文件】
Git Reset 三种模式 - 简书
—hard:工作目录变为x,stage变为x(完全替换,变化丢弃)
—soft :工作目录不变(保持当前状态),相对于当前的新变化放入stage。(变化都变为未commit的)
—mix(默认):相对于当前的新变化放入工作目录。(变化都变为未add的状态)
变化:工作区 与 目标commit之间的变化。
git rm —cached file & git reset HEAD — file区别
git reset — file = git reset HEAD — file = git reset HEAD —mix —file?
重置stage区
git rm —cached file 也可以删除add的修改
reset & revert区别
revert新建一个
- revert用来撤销,并分享给别人。
checkout
git checkout HEAD 切换分支
git checkout HEAD . 重置文件
git checkout HEAD — filename和git checkout — filename区别
git checkout HEAD [file] = git reset HEAD + git checkout — [file]
checkout和reset —hard区别
- checkout 对工作目录是安全的,它会通过检查来确保不会将已更改的文件弄丢;而 reset —hard 则会不做检查就全面地替换所有东西。
- checkout是切换分支,原分支保留。reset带着分支走了,原commit没人管了。(可以通过git reflog查看)
注意WD safe = NO的两个
git checkout head . 清除stage中修改的文件,stage中新增文件保留。
git checkout -b a 与 git branch a区别
checkout -b = branch + checkout
git checkout -b develop origin/develop:从origin/develop新建 本地develop分支
git checkout -b some-feature develop:从本地develop上建立feature分支
branch
- git branch 是创建分支
- git branch -f 是改变分支指向提交节点
远程分支
【手动拉取远程分支】git 远程分支_u012845099的博客-CSDN博客
显示分支
- git branch -vv:显示本地分支对应的远程分支
- git remote -v:显示所有远程仓库
- git remote show origin:显示某个远程仓库的信息:
增加远程仓库
git remote add origin git@xxx:增加远程仓库
从远程仓库关联分支
git clone
git checkout -b develop origin/develop:从origin/develop新建 本地develop分支
git branch -u o/main foo
拉取分支
fetch修改本地的远程分支origin/xxx
git fetch origin dev(dev为远程仓库的分支名)更新本地origin/dev
如果 git fetch 没有参数,它会下载所有的提交记录到各个远程分支
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull = fetch + merge
git pull —rebase = fetch + rebase
git pull origin master 和 git pull origin/master区别
意思是origin master要fetch远程,origin/master只是一个本地的仓库不用fetch。git pull origin/master没啥用。
version control - Differences between git pull origin master & git pull origin/master - Stack Overflow
合并两个分支
git pull origin master —allow-unrelated-histories
git merge 合并分支时遇上refusing to merge unrelated histories的解决方案_冫安然的博客-CSDN博客
删除、覆盖远程分支
git push origin —delete testbranch:删除远程分支
git push —force:你自己 repository 的内容将覆盖远程 master分支的内容
git push origin :develop:删除远程分支(空分支推送到origin/develop)
删除本地的远程分支
git remote prune origin:删除本地的远程分支(远程分支对应的本地分支)
push到远程分支
git push —set-upstream|-u origin newbranch
- —set-upstream的作用就是关联,如果没有 —set-upstream,git branch -vv 可以看到没有关联远程分支
git push -u origin mybranch1
相当于 git push origin mybranch1 + git branch —set-upstream-to=origin/mybranch1 mybranch1
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin v1.0 :推送标签
git push 不带任何参数时的行为与 Git 的一个名为 push.default 的配置有关
merge
git merge feature master =~~ git checkout feature~~~~ + git merge master~~
git merge origin master和git merge origin/master的区别
git merge origin master 把远程分支master在本地的副本以及本地分支master合并到当前分支
git merge origin master和git merge origin/master的区别_tudou_fish的博客-CSDN博客_git merge origin
git merge —no-ff dev :禁用fast forward
rebase
git rebase —continue:解决冲突后继续
git rebase —abort:回到初始状态
git rebase -i:合并多次提交
使用 git rebase 提高 PR 质量 - 掘金
git pull = git fetch + git merge FETCH_HEAD
git pull —rebase = git fetch + git rebase FETCH_HEAD
git rebase VS git merge? 更优雅的 git 合并方式值得拥有
- rebase:对的本地分支使用变基,而对公开仓库的分支使用合并。
-
rebase & merge
git diff
git diff:工作区 和 index区
git diff -cache:index 和 commit区git clean【删除未提交的文件】
git clean -df
git reset —hard和git clean -f是一对好基友. 结合使用他们能让你的工作目录完全回退到最近一次commit的时候.commit
git commit -am “” 省去add
git commit –amend -m “修改上次提交”
git log
git log —oneline —decorate —graph
—pretty=oneline:一行显示
- —decorate:显示tag
git reflog
查看游离的commit(忘了commit id的)