史上最浅显易懂的Git教程《廖雪峰-git教程》
《廖雪峰-git教程》是我目前看到最详细的GIT入门教程,以下仅个人学习时的摘录(不定期更新),建议有时间的小伙伴自行学习《廖雪峰-git教程》
以下操作涉及变更
命令 | 描述 |
---|---|
git init | 将当前目录初始化为git仓库,生成一个.git的隐藏文件(git命令必须在git仓库目录下执行,即拥有.git文件夹的目录;同理,操作的文件也必须在git仓库目录下) |
git add xxx.txt | 将xxx.txt添加到仓库中(将文件放入git的暂存区) |
git commit -m "wrote a xxx.txt file" | 提交xxx.txt文件并记录提交描述(将暂存区的文件提交到当前分支) |
git reset --hard XXX | 回退到指定版本 |
git reset --hard HEAD | 回退至最新版本(当前版本),HEAD^ 上一版本,HEAD^^ 上上版本,几个 ^ 对应回退到的版本,为了简化,回退至100版本可使用git reset --hard HEAD~100 |
git reset --hard commit_id | 回退到指定版本 |
git checkout -- file | 撤销工作区的修改(将暂存区中的file替换掉工作区中的file,使得工作区与暂存区数据一致) |
git checkout HEAD -- file | 将工作区和暂存区的文件回退至HEAD一致 |
git reset HEAD xxx.txt | git add xxx.txt 后,将暂存区的修改撤销掉(unstage),退回工作区 |
git rm xxx.txt + git commit -m "remove xxx.txt" | 将删除操作同步至本地仓库 |
git rm --cached xxx.txt | 删除暂存区的xxx.txt,工作区未删除 |
以下操作不涉及变更
命令 | 描述 |
---|---|
git status | 查看仓库当前状态,查看哪些文件被修改 |
git diff | 查看difference,查看修改但未提交的不同(具体到文件内容的差异) |
git diff HEAD -- xxx.txt | 查看xxx.txt文件在工作区和版本库里面最新版本的区别 |
git log | 查看版本历史 |
git log --pretty=oneline | 简化输出的版本历史(打印出版本号和备注,忽略其他信息) |
git blame xxx.txt | 以列表形式查看文件的历史修改记录(版本号+时间+commit描述) |
git reflog | 查看命令历史(类似Linux系统下的history) |
git log --graph --pretty=oneline --abbrev-commit | 查看分支合并图 |
基本操作
撤销操作
##修改工作区的文件,但未添加到暂存区
#工作区的文件还原和暂存区一致(注意,'checkout --' 不是还原到和版本库中一致)
git checkout -- xxx.txt #效果:工作区变更为与暂存区一致
##工作区中的文件修改后,添加到暂存区,并未commit到版本库
#撤销暂存区的修改
git reset HEAD xxx.txt #效果:暂存区变更与版本库一致(工作区不改变)
#工作区改为与暂存区一致
git checkout -- xxx.txt #效果:工作区与暂存区一致
删除文件操作
## 方式一
#删除工作区和暂存区的xxx.txt
git rm xxx.txt
#提交
git commit -m "remove xxx.txt"
## 方式二
#删除暂存区xxx.txt
git rm --cached xxx.txt
#提交
git commit -m "remove xxx.txt"
#删除工作区xxx.txt()
rm xxx.txt
分支
命令 | 描述 |
---|---|
git branch | 列出分支 |
git branch -a | 列出分支(包含本地分支和远程分支) |
git branch {branchName} | 创建分支 |
git branch -d {branchName} | 删除分支 |
git branch -D {branchName} | 强制删除分支 |
git checkout {branchName} / git switch {branchName} | 切换至已有分支 |
git checkout -b {branchName} / git switch -c {branchName} | 创建并切换分支 |
git merge {branchName} | 将{branchName}分支与当前分支合并(Fast forward模式) |
git merge --no-ff -m "merge with noff" {branchName} | 将{branchName}分支与当前分支合并(–no-ff 普通模式合并) |
git stash | 保存当前工作现场(将当前分支的工作区和暂存区的修改保存/隐藏,使工作区与版本库一致) |
git stash list | 查看保存的工作现场记录(多次git stash 产生多个工作现场记录) |
git stash apply stash@{0} | 回到指定的工作现场 |
git stash drop stash@{0} | 删除指定的工作现场记录 |
git stash pop | 回到指定的工作现场并删除指定的工作现场记录 |
git cherry-pick {commit_id} | 复制一个特定的提交到当前分支 |
- 使用
--no-ff
合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并 git switch -c {branchName}
,新分支是已当前分支的当前工作区为快照创建的;注意:若当前分支存在未提交的修改,创建的新分支含有这部分修改的内容
question:不同分支的暂存区相同吗?为什么创建分支testing中修改xxx.txt并git add xxx.txt
,不进行git commit
操作;切换至master分支后,git status
可以获取在testing分支的修改信息,此时在master下git commit
执行成功,切换至testing分支,xxx.txt退回到未修改的状态
远程仓库
命令 | 描述 |
---|---|
git remote add origin url | |
git push --set-upstream origin testing | |
git pull | |
git push |