Git 高频命令、版本回退、分支操作、文件修改删除、撤销、标签、远程仓库推送、拉取

1. 高频命令

  • git add

将工作文件修改提交到本地暂存区。

  • git add .

将所有修改过的工作文件提交暂存区(常用)。

  • git commit -m "XXX"

为本次修改打一个 tag,当然此条命令通常跟在 git add 后使用。每次 commit 都会有一个对应的 tag,当打包发布时,往往我们会打对应 tag 的版本。所以 tag 是一次有意义记录,它是和某次 git commit 绑定对应的。

  • git push origin branch_name

将本地 branch_name 分支推到远程 branch_name 分支。

  • git branch -d branch_name

删除本地分支 branch_name注意:删除本地分支时,当前所处分支不能是要删除的该本地分支)。

  • git branch -D branch_name

强制删除本地分支 branch_name(如果 branch_name 分支当前修改的内容没有暂存,那么只有强制删除有效)。

  • git push origin --delete branch_name

删除服务器端分支 branch_name

  • git pull origin branch_name

拉取服务器端 branch_name 分支的内容并合并到本地 branch_name 分支(一般来说,多人共用一个分支时,如果你有需要提交到服务器的内容,则要先用此命令更新本地分支的内容,然后再将新的内容提交到服务器)。

  • git fetch origin branch_name

拉取服务器端 branch_name 分支的内容,但不合并。此操作一般是不确定远端代码是否存在问题,为保险起见,可先拉取到本地查看,确认无误后,和合并此代码到本地的对应分支下。

  • git merge origin/branch_name

将服务器端 branch_name 分支合并到本地当前分支下。

  • git merge branch_name

将本地 branch_name 分支合并到本地当前分支下。

  • git checkout -b branch_name origin/branch_name

如果本地没有 branch_name 分支,想要基于服务器端 branch_name 分支创建一个,但又不想影响到本地的当前分支。可以使用此命令进行本地 branch_name 分支的创建。

  • git branch

查看本地存在分支。

  • git branch -a

查看所有本地关联到的分支(远端分支也能打印出来,但是关联如果没有建立,那么是不会显示的,此时我们可以使用 git fetch 拉下来所有分支。)。

  • git status

查看当前分支的状态,一般合并分支代码后,用于检查是否有冲突。

  • git reset --hard

回退到 commit id 提交的版本,仅对已经 commit 到本地的代码有效

  • git checkout

该命令是对未提交到缓存区的代码进行撤销。例如本地修改代码之后,在没有执行 git add 命令之前又想撤销操作,可以执行该命令。

  • git reset HEAD --

该命令是将放入暂存区的代码进行撤销,放入到工作区中。

  • git config user.name "提交者的名称"

配置当前仓库下提交者的名称。

  • git config user.email "邮箱"

配置当前仓库下提交者的邮箱。

  • git config --global user.name "用户名"

配置全局提交者的名称。

  • git config --global user.email "邮箱"

配置全局提交者的邮箱。

  • git config --global --list

查看我们的配置

2. git merge 和 git rebase

git mergegit rebase 使用场景

  1. git merge 一般用于新功能的开发和 bug 修复;
  2. git rebase 在主分支上进行开发,或者 Pull 的冲突解决;
  3. git merge 主要是在主分支上进行使用,而 git rebase 是在从分支上进行使用。

git mergegit rebase 区别:

  • git merge 会生成新的 commit ,而 git rebase 不会生成新的 commit ,会保留比较完整的提交历史。
  • git merge 是按照时间顺序进行合并,而 git rebase 是将 主分支顺序不变,插入到从分支的前端。

git rebase 注意事项: 如果分支已经 Push 到了远程仓库就不要对该分支进行 git rebase 操作。如果已经提交到了远程分支再进行 Push 的时候容易出现冲突,我们可以采用 git push --force ,但是最好是永远不要使用这个命令。

3. 与远程服务器交互命令

  • 添加远程服务器:
git remote add branch_alias(别名) http://github.com/ccod_project/dcmsstatics4-5git.git
  • 查看远程服务器的相关信息:
git remote -v
git remote show branch_alias
  • 重命名远程仓库信:
git remote rename demo test
  • 删除远程仓库:
git remote rm test

注:由于远程库是空的,我们第一次推送 master 分支时,加上了 -u 参数, git 不但会把本地的 master 分支内容推送到远程新的 master 分支,还会把本地的 master 分支和远程的 master 分支关联起来,在以后的推送或者拉取时就可以简化命令。

之后,只要本地作了提交,就可以通过命令把本地 master 分支的最新修改推送至 github

git push branch_alias master
  • 从远程仓库获取数据:
git fetch origin develop --- 只是获取远程仓库的数据至 .git 目录,并未merge本地
git merge origin/develop --- 把获取的远程仓库的数据手工merge至当前分支
git pull origin develop ---- 获取远程仓库的数据,并自动merge至当前的分支,相当于以上两步

4. 版本回退

git 中,用 HEAD 表示当前版本,也就是最新的提交 commit id ,上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ ,当然往上 100 个版本写 100 个 ^ 比较容易数不过来,所以写成 HEAD~100

  • 回退到上一个版本 :
git reset --hard HEAD^
  • 回退到上上一个版本 :
git reset --hard HEAD^^
  • 回退到上 N 个版本:
git reset --hard HEAD~N(N 是一个整数)
  • 回退到任意一个版本:
git reset ––hard 版本号
  • 丢弃工作区的修改(撤销):
git checkout -- file
  • 删除文件:
正确操作:git rm file git commit -m “remove file”(文件被删除)
操作失误:git checkout -- file(文件被恢复)

5. 分支相关

  • 查看当前分支
git branch (-a)
  • 新建分支
git branch develop(只是新建了一条分支,并未切换)
  • 切换分支
git checkout develop
  • 新建并切换分支
git checkout -b feature(相当于3.10和3.11两步操作)
  • 删除分支
git branch -d feature(注意:不能删除当前所在分支)
  • 合并分支(–no-ff参数,表示禁用Fast forward):
git checkout develop  &&  git merge feature(把feature分支合并到develop分支)

注:

因为我们创建 git 版本库时, git 自动为我们创建了唯一一个 master 分支, 所以默认 git commit 就是往 master 分支上提交更改。

如果要丢弃一个没有被合并过的分支,可以通过 git branch -D 强行删除。

建立本地分支和远程分支的关联,使用 git branch --set-upstream branch-name origin/branch-name

汇总:

查看分支:git branch,git branch -r 查看远程服务器上有多少个分支
创建分支:git branch 分支名称(Develop)
切换分支:git checkout 分支名称(Master)
合并分支:git merge 分支名称
删除分支:git branch -d 分支名称(删除本地分支),git push origin --delete 分支名称 (删除远程服务器的分支)
git branch 分支的名称 创建新的分支
git branch 分支名称 commitId 在指定 commitId 基础上创建分支
git checkout 分支的名称 切换分支
git checkout -b 分支的名称 创建新的分支并切换到该分支上
git checkout -b 分支名称 commitId 在指定 commitId 基础上创建分支并切换到该分支
git branch 查看本地所有的分支
git branch -a 查看本地和远程所有的分支。
git branch -m 原来的名称 新的名称 修改分支的名称
修改远程仓库分支的名称

修改远程分支的名称需要我们先将远程分支删除。
然后修改本地分支名称。最后将本地分支名称提交到远程仓库。

git push origin 分支名称 将分支推送到远程仓库中。
git branch -d 分支名称 删除本地仓库分支
git push origin --delete 分支名称 删除远程仓库分支。

6. git log 命令

git log 查看当前分支所有提交历史记录。
git log --all 查看所有分支的提交历史记录
git log --oneline 查看简洁提交历史记录
git reflog 查看所有分支的所有操作记录 (包括被删除的commit 操作记录)后面会介绍到。
git log -n2 查看最近2次提交的历史记录
git log -p -2 最近两次提交差异显示
git log --pretty=oneline 查看简洁提交历史记录

7. git 删除修改文件

git rm + git mv 命令介绍
git rm 文件名称 从工作目录中删除该文件并且本地不保留。
git rm --cached 文件名称 从版本控制中删除该文件,但在本地保留该文件(相当于将文件从暂存区撤销到工作区中)
git mv 原来名称 新的名称 更改文件名并提交到本地仓库 (暂存区和本地仓库文件)本地仓库需要再次执行 commit 提交。

8. git 帮助

你可能觉得 Git 命令这么多,记不住啊。没事,学会下面 3 个命令,快速帮你进行回忆操作。

git help

展示经常使用命令的介绍。

git help 具体操作命令

对具体命令操作的介绍 会打开默认游览器进行查看具体命令介绍。

git 具体操作命令 -h

对具体命令操作的介绍 例如 git commit -h ,git add -h。

9. git 撤销

当你完成工作将文件提交到工作区或者暂存区甚至本地仓库后,你才发现提交的内容有问题。当你抓耳挠腮想着"怎么办,怎么办”的时候,不如看看下面命令,也许会帮助到你哦。

git chekout --文件名称 将工作区的文件撤销到缓存区中(前提是该文件已经执行过 git add 操作。)

git reset 文件名称 或 git reset HEAD 文件名称 将暂存区的代码撤销到工作区中。

git reset --hard 要切换 commit 的记录id 丢弃所有历史记录并将更改返回到指定的提交历史上

git reset --hard 执行的时候是比较危险的,它的危险之处是如果你的文件还未 commit 执行 git reset --hard 可能导致文件无法进行恢复的。如果已经 commit 我们可以通过 reflog 来找回它。

下面还有3个比较有意思的命令:

git reset --soft HEAD^:将最新的提交的记录还原到到暂存区
git reset --mixed HEAD^:将最新的提交的记录还原到工作区
git reset --hard HEAD^:将最新的提交的记录全部清除

10. 历史记录对比命令介绍


git diff --cached | git diff --stage 暂存区和最新提交内容比较
git diff --文件名 工作区和暂存区内容的比较。
git diff commitId1 commitId2 --文件名 查看不同历史提交文件内容的不同
git diff 分支1名称 分支2名称 比较分支1 和分支2 提交文件内容的不同。

11. 远程仓库推送、拉取操作命令介绍

git push 将本地分支的更新推送到远程仓库中。
git fetch 从远程仓库中获取最新的内容 但是不会执行合并的操作(git merge)
git pull 从远程仓库中获取最新内容并且合并到本地仓库中,相当于 git merge + git fetch 的操作

12. git 分支合并操作

  • git merge 分支名称
git merge <branch name>
git merge 一般我们都是主分支合并从分支比较多。
  • git rebase 分支名称

和 git merge 的操作方式是一样的,不过一般 git rebae 主要是用来将主分支合并到从分支的操作中比较常见。后面我们会介绍 git merge 和 git rebase的区别。

git rebase 和 git merge 的区别

  1. git merge 会生成新的 commit,而 git rebase 不会生成新的 commit,会保留比较完整的提交历史。
  2. git merge 是按照时间顺序进行合并,而 git rebase 是将 主分支顺序不变,插入到从分支的前端。

git merge 和 git rebase 使用场景:

  1. git merge 一般用于新功能的开发和 bug 修复;
  2. git rebase 在主分支上进行开发,或者 Pull 的冲突解决;
  3. git merge 主要是在主分支上进行使用,而 git rebase 是在从分支上进行使用。

git rebase 注意事项:

如果分支已经 Push 到了远程仓库就不要对该分支进行 git rebase 操作。如果已经提交到了远程分支再进行 Push 的时候容易出现冲突,我们可以采用 git push --force,但是最好是永远不要使用这个命令。

13. 标签种类的介绍

Git 标签分为 2 种。

轻量标签(lightweight)

轻量标签 一般是用于临时的标签 ,轻量标签仅仅记录了commit 的信息。

附注标签(annotated)

附注标签 记录的信息更为详细 它包含了创建标签的作者 创建日期 以及标签信息。一般建议创建附注标签。

Git 标签操作命令介绍

git tag 标签名称 创建轻量标签
**git tag -a 标签名称 -m '标签注释' ** 创建附注标签,一般建议使用附注标签。
git tag -a commitId 指定 commitId 创建标签
git tag 和 git tag --list | git tag -l 查看所有的标签。
git tag -l 'v*.0' 查看以 v 开头和以 0 结尾的所有的标签
git show 标签的名称 查看标签的具体信息
git ls-remote --tags 查看远程仓库的标签列表
git push origin 标签名称 将标签推送到远程仓库中。
git push origin --tags 提交本地所有的标签到远程仓库
git tag -d 标签名称 删除该标签
git push origin :refs/tags/标签名称 删除远程仓库的标签。

14. git 最好不要使用的危险命令

  • git reset --hard

这个命令之切换不同的历史记录,危险之处在于如果添加的工作内容没有执行 commit,执行 git reset —hard,那么这些没有 commit 的工作内容有可能丢失。

  • git commit --amend

git rebase -i git commit --amend 和 git rebase -i 都可以用来修改我们的 commit 并不会产生新的 commit,但是这个修改操作必须是在你还没有推送远程仓库前去执行。因为通过这2个命令进行修改虽然不会产生新的 commit,但是我们的 commitId 会发生变化,我们在推送的时候会报Note about fast-forwards,如果想将你的修改推送只能使用强制推送 git push -f 操作,这样会强制将你的历史版本覆盖到远程仓库。当然别人的提交历史也会被覆盖掉。

  • git push -f

上面我们已经说了 执行该操作会强行将自己本地仓库历史版本覆盖到远程仓库的历史版本。这样别人提交的历史版本信息会丢失掉。

我这里所说的最好不要使用也不是很绝对哈,危险命令的危险在于你不了解它的危害就胡乱操作。当我们知道它们的注意事项,这些危险命令有时候对我们是有利的。例如我们创建了几个提交并且没有将其提交到远程仓库,我们完全可使用 git reset --hard 将我们不像要的 commit 丢弃掉,可以通过 git commit —amend 和 git rebase -i 对我们已提交的 commit 进行修改。但是 git push 这个操作是千万不要执行的。

文章参考来源:

https://gitbook.cn/books/5cb7dc185e228a2b9d502831/index.html

你可能感兴趣的:(Git)