HEAD
`HEAD是什么:其实答案也很简单,它保存着一个名为 HEAD 的特别指针。在 git 中,它是一个指向你正在工作中的本地分支的指针,可以将 HEAD 想象为当前分支的别名;`
git reset HEAD <file>指的是恢复到当前分支中文件的状态。git log日志展示中HEAD -> master指的是:当前分支指向的是master分支。
配置操作
-
全局配置
git config --global user.name '你的名字'git config --global user.email '你的邮箱' -
当前仓库配置
git config --local user.name '你的名字'git config --local user.email '你的邮箱' -
查看 global 配置
git config --global --list -
查看当前仓库配置
git config --local --list -
删除 global 配置
git config --unset --global 要删除的配置项 -
删除当前仓库配置
git config --unset --local 要删除的配置项
Git代码回滚(代码被覆盖如何恢复)
git reflog查看你提交代码的记录;git reset --hard HEAD^回退到上个版本;git reset --hard HEAD~3回退到前3次提交之前,以此类推,回退到n次提交之前;git reset --hard 版本号版本号(前面的黄色字体就会版本号,例如git reset --hard eb30a960 );
git stash将还未 commit 的代码存起来,让你的工作目录变得干净。
-
git stash将当前分支还未commit的代码暂存(注:如果代码没有commit,是不能切换分支的;); -
git reset apply切换到对应的分支,恢复暂存代码(应用最近一次的stash);保存当前未commit的代码
-
git stash save "备注的内容"保存当前未commit的代码并添加备注 -
git stash list列出stash的所有记录 -
git stash clear删除stash的所有记录 -
git stash pop应用最近一次的stash,随后删除该记录 -
git stash drop删除最近的一次stash
本地操作
git init初始化;git status查看工作区变更情况;git add -A将当前工作区所有改动都加入到暂存区;git add <file_name> <file_name>将指定文件改动加入到暂存区;git commit -m '提交信息'将暂存区所有内容提交到本地库;git commit -am '提交信息'等同于 git add . && git commit -m;git diff比较工作区和暂存区的所有差异;git diff <file_name>比较某文件工作区和暂存区的差异;git diff --cached <file_name>比较暂存区和 HEAD 的所有差异;git diff HEAD <file_name>比较某文件工作区和 HEAD 的差异;git checkout <file_name> <file_name>将工作区指定文件恢复成和暂存区一致;git reset <file_name>将暂存区指定文件恢复成和 HEAD 一致;git reset --hard将暂存区和工作区所有文件恢复成和 HEAD 一样;git difftool <commit1> <commit2>用 difftool 比较任意两个 commit 的差异;git ls-files --others查看哪些文件没被 Git 管控;git stash pop/apply临时任务处理完后继续之前的工作,pop不保留stash/apply保留stash; -git rm --cached fileName删除暂存区的某个文件,但是工作区还存在,需要再删除工作区的文件;
分支操作
git branch查看本地分支;git branch -a查看本地和远端分支;git branch -r查看远端分支;git checkout <branch_name>切换到指定分支;git checkout -b <new_branch_name>创建并切换到该分支;git branch <new_branch_name>基于当前分支创建新分支;git branch <new_branch_name> <old_branch_name>基于指定分支创建新分支;git branch <new_branch_name> <某个commit的id>基于某个commit创建分支;git branch -m <old-branch-name> <new-branch-name>重新命名分支;git branch -d <branch_name>安全删除本地某分支;git branch -D <branch_name>强行删除本地某分支;git remote prune orign删除远端 origin 已不存在的所有本地分支;git merge A分支将 A 分支合入到当前分支中且为 merge 创建 commit;git merge A分支 B分支将 A 分支合入到 B 分支中且为 merge 创建 commit;git rebase B分支将当前分支基于 B 分支做 rebase,以便将B分支合入到当前分支;git rebase B分支 A分支将 A 分支基于 B 分支做 rebase,以便将 B 分支合入到 A 分支;
变更历史
git log --oneline当前分支各个 commit 用一行显示;git log -n显示就近的 n 个 commit;git log --oneline --graph --all用图示显示所有分支的历史;git log 文件名查看涉及到某文件变更的所有 commit;git blame 文件名某文件各行最后修改对应的 commit 以及作者;
远程交换
git remote -v查看所有远端仓库;git remote add url添加远端仓库;git remote remove remote的名称删除远端仓库;git remote rename 旧名称 新名称重命名远端仓库;git pull origin 分支名把远端分支的变更拉到本地,且 merge 到本地分支;git push origin 分支名 / git push origin dev:dev将本地dev分支 push 到远端dev;git push origin dev:master将本地dev分支 push 到远端master分支;git push remote --delete 远端分支名/git push remote :远端分支名删除远端分支;
完整的流程是:
第一种方法:(简单易懂)
1、git add .(后面有一个点,意思是将你本地所有修改了的文件添加到暂存区)
2、git commit -m""(引号里面是你的介绍,就是你的这次的提交是什么内容,便于你以后查看,这个是将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中)
3、git pull origin 远程分支名** 这是下拉代码,将远程最新的代码先跟你本地的代码合并一下,如果确定远程没有更新,可以不用这个,最好是每次都执行以下,完成之后打开代码查看有没有冲突,并解决,如果有冲突解决完成以后再次执行1跟2的操作
4、git push origin master(git push origin 本地分支名:refs/remotes/远程分支名) 将代码推至远程就可以了
第二种方法:
1、git stash (这是将本地代码回滚值至上一次提交的时候,就是没有你新改的代码)
2、git pull origin 远程分支名(将远程的拉下来)
3、git stash pop(将第一步回滚的代码释放出来,相等于将你修改的代码与下拉的代码合并)
然后解决冲突,你本地的代码将会是最新的代码
4、git add .
5、git commit -m ""
6、git push origin master(git push origin 本地分支名:refs/remotes/远程分支名)
这几步将代码推至了远程
最后再git pull origin 远程分支名** 一下,确保远程的全部拉下来,有的你刚提交完有人又提交了,你再拉一下会避免比的不是最新的问题