Git 常用命令
大览
- master 默认开发分支
- Origin 默认远程版本库
- Head 默认开发分支
- Head^ Head的父提交
创建版本库
- git clone 从远程仓库拷贝代码到本地 
- git init 创建 Git 库
分支与标签
- git branch xxx_dev 创建名字为 xxx_dev的分支
- git branch -d xxx_dev 删除xxx_dev的分支
- git branch 查看当前的分支名称
- git branch -r :查看远程分支
- git merge 将 branch 分支合并到当前分支 
- git checkout xxx_dev 切换到名字为 xxx_dev的分支
- git checkout 可以将 HEAD 移到一个新的分支,并更新工作目录。因为可能会覆盖本地的修改,所以执行这个指令之前,你需要 stash 或者 commit 暂存区和工作区的更改。
- git push origin xxx_dev 执行推送的操作,完成本地分支向远程分支的同步
- git tag 查看标签
- git tag xxx_dev 基于最新提交创建名字为 xxx_dev标签
- git tag -d xxx_dev 删除xxx_dev的标签- 打标签 git tag -a v1.01 -m “Release version 1.01”
- 提交标签到远程仓库 :git push origin --tags
- 查看某两次 tag 之间的 commit :git log --pretty=oneline tagA..tagB
- 查看某次 tag 之后的 commit :git log --pretty=oneline tagA..
 
- git checkout  切换到指定分支或标签;可以将 HEAD 移到一个新的分支,并更新工作目录。因为可能会覆盖本地的修改,所以执行这个指令之前,你需要 stash 或者 commit 暂存区和工作区的更改。 
这两个命令都是把修改从一个分支集成到另一个分支上,它们只是以非常不同的方式进行
何时使用:
- 如果你对修改不够果断,请使用合并操作
- 根据你希望的历史记录的样子,而选择使用变基或合并操作
- git merge 把本地代码和已经取得的远程仓库代码合并
- git rebase ,是复位基底的意思。使用变基时,意味着使用另一个分支作为集成修改的新基础
Git 提交代码时候写错 commit 信息后,如何重新设置 commit 信息?
可以通过 git commit --amend 来对本次 commit 进行修改。
修改和提交
- git status 查看当前仓库的状态 
- git diff 查看本次修改与上次修改的内容的区别 
- git show 显示某次提交的内容 git show $id 
- git add - 把现在所要添加的文件放到暂存区中 
- git rm - 从版本库中删除文件 
- git reset - 从暂存区恢复到工作文件 
- git reset HEAD^ 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改 
- git commit 把 git add 到暂存区的内容提交到代码区中 
- git stash 暂存 
- git stash pop 恢复最近一次的暂存 
- git reset HEAD^ —hard 刚才的Commit后悔了,想要拆掉重做) 
远程操作
- git pull 抓取远程仓库所有分支更新并合并到本地
- git push origin master:将本地主分支推到远程主分支
- 使用 git fetch是取回远端更新,不会对本地执行 merge 操作,不会去动你的本地的内容。而git pull会更新你本地代码到服务器上对应分支的最新版本
- git remote -v 查看远程版本库信息
- git remote  show 查看指定远程版本库信息 
- git remote add 添加远程版本库 

来自于 芋道源码
🦅 reset 与 rebase 有什么区别?
- reset 操作,不修改 commit 相关的东西,只会去修改 .git目录下的东西。
- rebase 操作,会试图修改你已经 commit 的东西,比如覆盖 commit 的历史等,但是不能使用 rebase 来修改已经 push 过的内容,容易出现兼容性问题。rebase 还可以来解决内容的冲突,解决两个人修改了同一份内容,然后失败的问题。
推荐看看 《“git reset”和“git rebase”有什么区别?》 。
🦅 reset 与 revert 与 checkout 有什么区别?
首先是它们的共同点:用来撤销代码仓库中的某些更改。
然后是不同点:
- 1)从 commit 层面来说: - git reset,可以将一个分支的末端指向之前的一个 commit 。然后再下次 Git 执行垃圾回收的时候,会把这个 commit 之后的 commit 都扔掉。- git reset还支持三种标记,用来标记 reset 指令影响的范围:- --mixed:会影响到暂存区和历史记录区。也是默认选项;
- --soft:只影响历史记录区;
- --hard:影响工作区、暂存区和历史记录区。- 注意:因为 - git reset是直接删除 commit 记录,从而会影响到其他开发人员的分支,所以不要在公共分支(比如 develop)做这个操作。
 
- git checkout,可以将 HEAD 移到一个新的分支,并更新工作目录。因为可能会覆盖本地的修改,所以执行这个指令之前,你需要 stash 或者 commit 暂存区和工作区的更改。
- git revert,和- git reset的目的是一样的,但是做法不同,它会以创建新的 commit 的方式来撤销 commit ,这样能保留之前的 commit 历史,比较安全。另外,同样因为可能会覆盖本地的修改,所以执行这个指令之前,你需要 stash 或者 commit 暂存区和工作区的更改。
 
- 2)从文件层面来说 - git reset,只是把文件从历史记录区拿到暂存区,不影响工作区的内容。而且支持- --mixed、- --soft和- --hard。
- git checkout,则是把文件从历史记录拿到工作区,不影响暂存区的内容。
- git revert,不支持文件层面的操作。
 
总的来说,回答关键点:
- 对于 commit 层面和文件层面,这三个指令本身功能差别很大。
- git revert不支持文件层面的操作。
- 不要在公共分支做 git reset操作。
🦅 不小心用 git reset –hard 指令把提交理掉了,有机会救回來吗?
放心,基本上东西进了 Git 就不容易消失,它們只是以一种我们肉眼看不懂的格式存放在 Git 空间裡。我们可以透過 git reflog 指令去翻一下被 reset 的那個 Commit 的编号值,然後再做一次 git reset --hard 就可以把它救回來了。





参考资料 【状况题】听说git push -f这个指令很可怕

