git init
git init #初始化仓库
git init --bare#初始化仓库,裸仓库,不带代码结构树,一般用于在git服务器上
git clone
git clone [url]
git clone git@github.com:fsliurujie/test.git --SSH协议
git clone git://github.com/fsliurujie/test.git --GIT协议
git clone https://github.com/fsliurujie/test.git --HTTPS协议
git add
git add -A 保存所有的修改
git add . 保存新的添加和修改,但是不包括删除
git add -u 保存修改和删除,但是不包括新建文件。
git rm
git rm <file>#将文件从暂存区和工作区中删除,-f表示强制,例如:git rm -f runoob.txt
git rm --cached <file> #如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中
git rm –r * #递归删除
git mv
git mv [file] [newfile]#git mv 命令用于移动或重命名一个文件、目录或软连接,例如:git mv README README.md
git commit
git commit -m "commitmessage" [filename]
-a表示顺便添加文件
git branch
git branch #列出分支
git branch testing #创建testing分支
git branch -b newtest#创建newtest分支,并立即切换该分支下
git branch -d newtest #删除newtest分支
git branch newbranch 9104953 #这是newbranch 是分支名,9104953 是版本号,一般用在误删分支了,想要恢复的时候,可以用.当然也是可以想检索出reflog的某个版本为新的分支的时候用.
git reflog(重要)
git reflog
HEAD@{移动到当前版本需要多少步}
- 基于索引值操作[推荐] git reset --hard a6ace91
- 使用^符号:只能操作 gitreset--hardHEAD^^^ #后退3步
- 使用~符号:只能后退 gitreset--hardHEAD~n #后退 n 步
git reset
reset这个操作是基于分支的,也就是对当前分支设置reset到哪个版本.
git reset [--soft | --mixed | --hard] [HEAD]
--soft
移动HEAD指针到指定位置,只让版本库里面的内容回到和目标版本一致,
使用场景:假如我们想合并「当前节点」与「reset目标节点」之间不具太大意义的 commit 记录(可能是阶段性地频繁提交,就是开发一个功能的时候,改或者增加一个文件的时候就commit,这样做导致一个完整的功能可能会好多个commit点,这时假如你需要把这些commit整合成一个commit的时候)時
--mixed
移动HEAD指针到指定位置,让版本库和暂存区的内容回到和目标版本一致,
使用场景: git reset HEAD 可以用来清除暂存区的内容.
--hard
移动HEAD指针到指定位置,让版本库和暂存区和工作区的内容回到和目标版本一致,
使用场景:活学活用吧,提交中为修改的文件也会被删除
git reset --hard branch2 #比较奇葩的一种写法,也从侧面说明了reset的本质是移动HEAD和branch
git checkout
git checkout branchname #如果原内容没有提交的话,切换到另一份分支之后,在切换为原来的分支,index区和工作区的内容都会被覆盖
git checkout 版本号 #(不建议使用,只能查看,提交不会保留),头分离状态,这感觉是创建了一个看不见的临时分支?并没有什么意义?
只放弃工作区的改动,index 保持不变,其实就是从当前 index 恢复 工作区:
放弃工作区中全部的修改(从缓存区恢复所有文件到工作区)git checkout .
放弃工作区中某个文件的修改(从缓存区恢复某个文件):git checkout -- filename
git checkout -f #谨慎操作,因为会把没有commmit的内容覆盖掉
git checkout HEAD . 和git checkout HEAD <file>
这2个命令和reset --hard其实有点像了,,会覆盖暂存区和以及工作区中的文件,也会清除暂存区中未提交的改动。
git remote
git remote -v #显示所有远程仓库
git remote add [shortname] [url] #添加远程仓库
git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名
git merge
git merge main #比如说当前分支是dev,就是把main合并到dev
#这个过程中,可能会有冲突,只需要修改冲突的文件为自己想要的结果,然后在重新add 冲突的文件,在git commmit -m "合并冲突备注,随便写",就已经合并好了.如果没有冲突话,默认会给你弹出编辑框,让你填写合并备注.
#一般情况下,博主个人会先合并到自己的分支,然后(解决冲突之后)在次合并回主分支
git rebase
git rebase main
#比如说当前所在的分支是dev,,,,dev和main是在B版本分开的,main分支在B之后提交了C,D 2个版本,而dev在B之后提交了EF2个分支,,那么结果就会是在dev分支上产生结果:A->B->C->D->E->F.中间如果有冲突就还是修改文件,add,然后commmit,
git pull
git pull #近乎等于git fetch + get merge
git push -u origin feature-branch #默认指定 本地分支feature-branch push到 远程origin