git - 图1

reset

git - 图2

  • 恢复index区,批量就是”.”

git - 图3

  • 修改了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新建一个
git - 图4

  • revert用来撤销,并分享给别人。

checkout

git - 图5
git - 图6
git checkout HEAD 切换分支
git checkout HEAD . 重置文件

git checkout HEAD — filename和git checkout — filename区别

git checkout HEAD [file] = git reset HEAD + git checkout — [file]
git - 图7

checkout和reset —hard区别

  • checkout 对工作目录是安全的,它会通过检查来确保不会将已更改的文件弄丢;而 reset —hard 则会不做检查就全面地替换所有东西
  • checkout是切换分支,原分支保留。reset带着分支走了,原commit没人管了。(可以通过git reflog查看)

git - 图8
image.png
注意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 -vv:显示本地分支对应的远程分支
  • git remote -v:显示所有远程仓库
  • git remote show origin:显示某个远程仓库的信息

image.png

增加远程仓库

默认叫origin,

git remote add origin git@xxx:增加远程仓库

从远程仓库关联分支

默认自动建立:

git clone

手动建立:

git checkout -b develop origin/develop:从origin/develop新建 本地develop分支

手动关联(关联(-u)已有分支):

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 - 图11

合并两个分支

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 <远程主机名> <本地分支名>:<远程分支名>
    image.png
    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合并到当前分支

image.png
git merge origin master和git merge origin/master的区别_tudou_fish的博客-CSDN博客_git merge origin

git merge —no-ff dev :禁用fast forward

image.png

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

    rebase & merge

    merge会更乱一点。
    image.png
    image.png

    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的)