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

posted @ 2020-04-23 15:22  晚来秋  阅读(171)  评论(0编辑  收藏  举报