常用Git指令总结

本文总结了git中最常用的命令。

基本用法

在这里插入图片描述

上面五条命令在工作目录、暂存目录和本地仓库之间修改文件。

  • git add files把当前工作目录下files的修改放到暂存目录,git add .将所有修改加入暂存目录。
  • git commit -m "xxx"将暂存目录生成快照并提交到本地仓库,提交的信息为xxx。
  • git reset --soft HEAD^用来撤销最后一次commit的所有文件,回到暂存目录。
  • git checkout -- files把文件从暂存目录撤回到工作目录,用来丢弃本地修改。

命令解释

git diff

有时需要查看两次提交之间的变动。
diff

  • git diff相对于暂存目录,查看本地目录的变动。
  • git diff --cached相对于本地仓库,查看暂存目录的变动。
  • git diff HEAD相对于本地仓库,查看本地目录的变动。
  • git diff b325c da985 查看b325cda985两次提交之间的改动。

git commit --amend

如果想更改上一次提交,使用git commit --amend。git会使用与当前节点相同的父节点进行一次新的提交,上一次的提交会被取消,但是内容存在。该命令也可以用于修改上一次提交信息。
git commit --amend

git cherry-pick

git cherry-pick commitID命令表示将commitID这个提交节点在当前分支做一次完全一样的提交。

git cherry-pick
main分支操作git cherry-pick 2c33a,将topic分支2c33a这笔提交copy过来。

git rebase

git rebase是不同于git merge的一种合并命令。git merge合并是把两个父分支合并进行一次新提交,提交历史不是线性的。而git rebase衍合在当前分支上重演另外一个分支的所有历史提交,提交历史是线性的,本质上,这是线性的自动化cherry-pick操作。

  • git merge
    git merge
    main分支的ed489节点进行git merge other操作,将当前提交ed489other分支的提交,以及他们的共同祖父节点b325c进行一次三方合并。结果是先保存工作目录和暂存区域,然后做一次新提交f8bc5
  • git rebase
    git rebase
    topic分支进行git rebase main操作,在公共祖父节点处重演main分支中三次提交b325cc10b9da985,形成线性的提交。
    同样,git rebase -i HEAD~n可以让你更加方便地完成一些复杂的操作,比如丢弃、重排、修改、合并最后n次提交。

git log

git log
git log -p
git log --oneline
git reflog

git log可以查看详细的提交历史,用git log -p可以查看详细的提交历史和每次提交的修改内容,用git log --oneline可以查看简略的提交历史。HEAD指向的提交就是当前的提交,因此使用命令git reset --hard commitID可以让我们在所有的历史提交之间切换。如果不小心切回到某个历史提交,那么如何切回未来的某个提交呢?要重返未来,用git reflog查看历史提交,以便确定要回到未来的哪个提交。

git stash

有时,当你在工作目录修改了一些文件,所有东西都进入了混乱的状态, 而这时你想要切换到另一个分支做一点别的事情(比如处理紧急的bug)。 问题是,你不想为做了一半的工作创建一次提交。 针对这个问题的答案是 git stash 命令。
贮藏(stash)会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上, 而你可以在任何时候重新应用这些改动(甚至在不同的分支上)。

  • 暂存现状
git stash # 直接添加到栈上
git stash save "tips info" # 添加到栈上并添加了提示信息
  • 显示暂存
git stash list
  • 恢复暂存
git stash pop # 恢复到最新的操作,list中就不存在该stash了
git stash pop stash@{num} # 恢复指定的stash
git stash apply # 恢复到最新的操作,list中就还存在该stash
git stash apply stash@{num} # 恢复指定的stash

使用场景

开发流程

开发时,通常新建一个dev分支,修改代码,然后将修改的代码合并到master分支上,再用master分支提交代码和远程仓库同步。这样的好处是每次合并到master分支前可以git pull更新,然后再merge,不容易出错,提交的历史比较漂亮,即使有紧急的bug,在master分支新建一个bug分支进行处理就可以了,不影响dev分支的开发。

git checkout -b dev
# coding->add->commit
git checkout master
git pull
git checkout dev
git rebase master
git checkout master
git merge dev
git push

打patch

假如客户有一个紧急的bug需要解决,此时需要修改代码后,提供一份patch给客户马上可以使用。
git diff生成的标准patch。

git diff > xxx.patch # 生成patch
# 将xxx.patch提供给客户,客户打上该patch立马修复bug
git apply xxx.patch  # 应用patch

要生成两个commit之间的patch,也可以使用git diff命令实现。

git diff commit-old commit-new > old2new.patch

最好在添加更改文件的before和after版本,以防客户的仓库版本和你本地的仓库版本不一致,打不上patch,此时就可以用对比工具看具体的改动,直接添加。

  • before表示修改前的文件
  • after表示修改后的文件

配置别名

配置别名,可以偷懒少敲几个字母。

git config --global alias.co checkout
git config --global alias.st status
git config --global alias.cm commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

简化后的指令:

git co
git st
git cm
git br
git unstage
git last
git lg

参考:
图解Git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值