Git常用的命令及提交流程

204 阅读6分钟
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 远程分支名** 这是下拉代码,将远程最新的代码先跟你本地的代码合并一下,如果确定远程没有更新,可以不用这个,最好是每次都执行以下,完成之后打开代码查看有没有冲突,并解决,如果有冲突解决完成以后再次执行12的操作

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 远程分支名** 一下,确保远程的全部拉下来,有的你刚提交完有人又提交了,你再拉一下会避免比的不是最新的问题