git_test
配置用户名和email
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
创建版本库
git init
添加文件到暂存区
git add .
提交文件到版本库
git commit -m""
查看状态
git status
比较文件
git diff <filename> 工作区VS暂存区
git diff head <filename> 工作区VS版本库
git diff --cached <filename> 暂存区VS版本库
历史
git log 提交历史
git reflog 命令历史
版本回退
git reset --hard HEAD^(或版本号)
( HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本写成HEAD~100 )
git reset --soft 暂存区->工作区
git reset --mixed 版本库->暂存区
git reset --hard 版本库->暂存区->工作区
丢弃工作区的修改
git checkout -- <filename>
让这个文件回到最近一次git commit或git add时的状态
(一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
)
删除文件
在工作区删除文件 rm file
从版本库删除该文件,命令git rm file,然后git commit
远程
创建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
本地库的所有内容推送到远程库上
git push -u origin master
(远程库的名字就是origin
第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令)
从远程仓库克隆
git clone 地址
查看远程库信息
git remote -v
分支
创建分支
git checkout -b dev 或 git switch -c dev 创建并切换到dev分支
等同于
git branch dev 创建分支
git checkout dev 或 git switch dev 切换分支
查看当前分支
git branch
合并指定分支到当前分支
git merge <branchname>
删除分支
git branch -d dev
git branch -D <name>强行删除没有被合并过的分支
查看合并情况
git log --graph --pretty=oneline --abbrev-commit
普通模式合并
git merge --no-ff -m "merge with no-ff" dev
合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
stash
存储工作现场到stash
git stash
显示stash列表
git stash list
恢复stash
git stash pop
等同于
git stash apply 恢复
git stash drop 删除
恢复指定stash
git stash apply stash@{0}
复制一个特定的提交到当前分支
git cherry-pick 4c805e2
推送分支
git push origin master
删除远程仓库文件
当我们不错误的把需要ignore的文件上传到了远程仓库时,需要将其删除
git rm -r ––cached dirname //删除远程文件夹,但保留本地文件夹
git commit -m "" //提交操作,并添加描述
git push origin master //推送
merge VS rebase
两者都可以合并分支,主要区别是所产生的log tree不一样。
原分支情况:
A --- B --- C
-
-- D --- E
git merge后:
A --- B --- C ---------- F
- -
-- D --- E
git rebase后:
A --- B --- C --- D' --- E'
分支重命名
1.本地分支重命名
git branch -m oldName newName
2.远程分支重命名
// 重命名本地分支
git branch -m oldName newName
// 删除远程分支
git push --delete origin oldName
// push 本地分支
git push origin newName
// 本地分支远程分支关联
git branch --set-upstream-to origin/newName
本地git push 免用户名和密码设置
git config --global user.email "xxx@xxmail.com"
git config --global user.name "xxx"
git config --global credential.helper store # git push的时候记住用户名和密码
git config --global push.default simple #从Git 2.0之后,push.default的默认值由'matching'改为'simple'