Git常用操作
示例远程仓库:https://github.com/LetMeHold/test.git
配置全局用户和邮箱
git config --global user.email "xxx@xx.com" git config --global user.name "Xxx"
# 保存在~/.gitconfi
配置单个库的用户和邮箱
# 首先进入库目录 git config user.email "xxx@xx.com"
git config user.name "Xxx"
# 保存在库目录下的.git/config
记住用户密码
git config --global credential.helper store
# 下次输入用户名密码后就会保存在~/.git-credentials
# 若要删除保存且不再记住密码只需要
# 删除整个文件~/.git-credentials
# 删除文件.gitconfig中的下面两行:
# [credential]
# helper = store
克隆clone
git clone https://github.com/LetMeHold/test.git
提交commit
# 修改或新增文件
git diff # 查看修改的内容
git add [file/dir] # 添加指定修改到暂存区
git add . # 添加所有修改到暂存区(.指的是当前文件夹,下同,注意执行命令时所在的路径)
git commit -m "提交日志" # 提交已暂存的修改,加参数-a可以将修改但未暂存的一起提交,新增文件则必须add暂存后才能提交
git pull # 从远程仓库同步到本地,推送前确保同步了远程仓库的最新版本
git push origin master # 推送本地分支master的更新到远程仓库origin的同名分支
注:通常不会直接修改master分支,而是新建一个本地分支进行修改,然后在本地或远程仓库进行合并
分支branch
git branch # 显示本地分支,-r 显示远程分支,-a 显示本地和远程分支
git checkout -b dev # 从当前分支,创建dev分支,并切换到dev分支
git checkout master # 切换到已存在的分支
git merge dev # 合并dev分支到当前分支;顺利的话就是快进式合并;若出现冲突需要解决冲突后手动提交
git push origin master # 将分支master同步到远程仓库origin
git push origin dev # 将分支dev同步到远程仓库origin
git branch -d dev # 删除本地分支dev
git checkout -b dev origin/dev # 将远程仓库origin的分支dev克隆到本地,在本地命名为分支dev
git push origin --delete dev # 删除远程仓库的分支dev
标签tag
git tag # 显示所有tag
git tag -a release-v1.0.0 -m "创建版本1.0.0的标签" # 从当前分支,创建一个tag
git push origin release-v1.0.0 # 将指定tag同步到远程仓库origin
git push origin --tags # 将所有tag同步到远程仓库origin
git tag -d release-v1.0.0 # 删除指定tag
git push origin :release-v1.0.0 # 删除远程仓库origin的指定tag,注意不能少了tag前的冒号
#若需要基于某个tag进行修改,请从该tag创建一个分支,在新分支修改后提交,测试没问题后删除旧tag,重新添加同名tag
git checkout -b dev-v1.0.0 release-v1.0.0 # 从指定tag创建一个新分支操作历史版本
查看历史记录
git log # 显示当前分支所有提交历史,超过一屏回车键下滚,按q退出 git log -l 10 # 显示最新的10个提交历史
git log --grep="订单" # 查找提交日志中包含"订单"关键字的记录
git log --oneline --grep="订单" # 检索记录,并单行简介显示(commit_id也是缩短版的,但在需要指定id的命令中也是有效可用的)
git show [commit_id] # 详细显示指定记录的信息,包括文件内容的具体变更
git diff [commit_id_2] [commit_id_2] # 对比两次提交的内容
git checkout [commit_id] # 检出指定版本的内容到工作区(也适用于tag),可以查看但不要修改,因为当前处于一个临时分支
git checkout -b fix # 创建一个新分支,然后就是熟悉的流程了:修改、提交、合并
# 更多git log用法
git log --oneline --graph # 单行简介显示,并绘制图形展示分支结构
git shortlog # 按提交者分类显示历史记录
git log --after="2020-01-01" # 显示指定日期之后的记录,--since同义 git log --before="2020-01-31" # 显示指定日期之前的记录,--until同义 git log --after="2020-01-01" --before="2020-01-31" # 显示指定区间内的记录
操作远程仓库
git remote -v # 显示远程仓库,默认是一个名为origin的远程仓库,它指向克隆出来的地址
git branch -a # 显示本地和远程仓库的所有分支(克隆出来默认只有一个master分支)
git checkout -b dev origin/dev # 将远程仓库origin的分支dev克隆到本地,在本地命名为分支dev
git remote add ali https://code.aliyun.com/letmehold/test.git # 添加一个名为ali的远程仓库,指向阿里云的代码托管平台
git push --all ali # 将所有分支推送到远程仓库ali
git remote rename origin github # 将远程仓库origin重命名为github
git remote rm ali # 删除远程仓库ali
撤销回滚
# 修改后,未暂存 git checkout [file/dir] # 还原指定文件的改动 git checkout . # 还原所有改动 # 已暂存,未提交
git reset [file/dir] # 将指定文件撤出暂存区
git reset . # 将所有文件撤出暂存区
注:撤出暂存区后,就可以用checkout还原修改
# 已提交
git revert [commit_id] # 将指定commit_id的版本内容覆盖到本地,并转到填写提交日志的步骤
注:revert是覆盖后再提交的过程,会多一次提交
# 彻底舍弃
git reset --hard [commit_id] # 重置到指定的版本,晚于该版本的提交、暂存区的内容以及工作区的修改全部彻底丢弃(慎用)
注1:通常来说彻底舍弃是没必要的,revert后重新提交即可,这样可以保留所有历史
注2:git reset是一个功能强大的命令,但理解不够容易造成困惑甚至灾难,没把握的情况下建议仅用于撤销暂存区
over