Git入门和常用命令详解

导读:本篇文章讲解 Git入门和常用命令详解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

Git图片

在这里插入图片描述
在这里插入图片描述

一、快速上手Git命令

  1. 拉取远程仓库到本地: git clone 地址 [重命名]
  2. 查看提交历史: git log
  3. 查看工作目录当前状态: git status
  4. 暂存文件/开始追踪文件: git add 文件路径
    1. add 后加个“.”,全部暂存
    2. add 添加的是文件改动,而不是文件名
  5. 提交文件到本地仓库: git commit
  6. 本地提交发布到中央仓库: git push
  7. 保存密码: git config credential.helper store
  8. 拉取最新的代码: git pull
  9. 查看具体的commit: git show [sha1码] [文件名]

小结

在这一节里,描述了 Git 的最基本的工作模型:

  1. 从 GitHub 把中央仓库 clone 到本地(使用命令: git clone
  2. 把写完的代码提交(先用 git add 文件名 把文件添加到暂存区,再用 git commit 提交)
    • 在这个过程中,可以使用 git status 来随时查看工作目录的状态
    • 每个文件有 “changed / unstaged”(已修改), “staged”(已修改并暂存), “commited”(已提交) 三种状态,以及一种特殊状态 “untracked”(未跟踪)
  3. 提交一次或多次之后,把本地提交 push 到中央仓库(git push

二、branch的创建、切换和删除

  1. 创建branch:git branch 分支名字
  2. 切换branch:git checkout 分支名字
    1. 可以使用:git checkout -b 分支名字来代替上两步
  3. 删除branch:git branch -d 分支名字
    1. 注意:HEAD指向的branch不能删除,如果要删除,需要先切换HEAD到其他分支
    2. 将-d改为-D,就可以强制删除不能删除的branch

小结(1)

这一节介绍了 Git 中的一些「引用」:HEADmasterbranch。这里总结一下:

  1. HEAD 是指向当前 commit 的引用,它具有唯一性,每个仓库中只有一个 HEAD。在每次提交时它都会自动向前移动到最新的 commit
  2. branch 是一类引用。HEAD 除了直接指向 commit,也可以通过指向某个 branch 来间接指向 commit。当 HEAD 指向一个 branch 时,commit 发生时,HEAD 会带着它所指向的 branch 一起移动。
  3. master 是 Git 中的默认 branch,它和其它 branch 的区别在于:
    1. 新建的仓库中的第一个 commit 会被 master 自动指向;
    2. git clone 时,会自动 checkoutmaster
  4. branch 的创建、切换和删除:
    1. 创建 branch 的方式是 git branch 名称git checkout -b 名称(创建后自动切换);
    2. 切换的方式是 git checkout 名称
    3. 删除的方式是 git branch -d 名称

小结(2)

这一节介绍了 push 这个指令的本质。总结一下关键点:

  1. push 是把当前的分支上传到远程仓库,并把这个 branch 的路径上的所有 commits 也一并上传。
  2. push 的时候,如果当前分支是一个本地创建的分支,需要指定远程仓库名和分支名,用 git push origin branch_name 的格式,而不能只用 git push;或者可以通过 git config 修改 push.default 来改变 push 时的行为逻辑。
  3. push 的时候之后上传当前分支,并不会上传 HEAD;远程仓库的 HEAD 是永远指向默认分支(即 master)的。

三、合并

命令

合并分支:git merge 分支名字
取消合并:git merge –abort

小结

本节对 merge 进行了介绍,内容大概有这么几点:

  1. merge 的含义:从两个 commit「分叉」的位置起,把目标 commit 的内容应用到当前 commitHEAD 所指向的 commit),并生成一个新的 commit
  2. merge 的适用场景:
    1. 单独开发的 branch 用完了以后,合并回原先的 branch
    2. git pull 的内部自动操作。
  3. merge 的三种特殊情况:
    1. 冲突
      1. 原因:当前分支和目标分支修改了同一部分内容,Git 无法确定应该怎样合并;
      2. 应对方法:解决冲突后手动 commit
    2. HEAD 领先于目标 commit:Git 什么也不做,空操作;
    3. HEAD 落后于目标 commit:fast-forward。

四、Feature Branching:最流行的工作流

流程

  1. 新建一个分支:git checkout -b 分支名字
  2. 提交到中心仓库:git push origin 分支名字
  3. 同事审核代码
    1. git pull
    2. git checkout 分支名字
  4. 审核通过
    1. git checkout master
    2. git pull
    3. git merge 分支名字
  5. 合并之后的结果push到中央仓库
    1. git push
    2. git branch -d 分支名字
    3. git push origin -d 分支名字

小结

这一节介绍了 Feature Branching 这种工作流。它的概念很简单:

  1. 每个新功能都新建一个 branch 来写;
  2. 写完以后,把代码分享给同事看;写的过程中,也可以分享给同事讨论。另外,借助 GitHub 等服务提供方的 Pull Request 功能,可以让代码分享变得更加方便;
  3. 分支确定可以合并后,把分支合并到 master ,并删除分支。

这种工作流由于功能强大,而且概念和使用方式都很简单,所以很受欢迎。再加上 GitHub 等平台提供了 Pull Request 的支持,目前这种工作流是商业项目开发中最为流行的工作流。

五、看看改了什么

  1. 查看历史中的多个 commitlog
    1. 查看详细改动: git log -p
    2. 查看大致改动:git log --stat
  2. 查看具体某个 commitshow
    1. 要看最新 commit ,直接输入 git show ;要看指定 commit ,输入 git show commit的引用或SHA-1
    2. 如果还要指定文件,在 git show 的最后加上文件名
  3. 查看未提交的内容:diff
    1. 查看暂存区和上一条 commit 的区别:git diff --staged(或 --cached
    2. 查看工作目录和暂存区的区别:git diff 不加选项参数
    3. 查看工作目录和上一条 commit 的区别:git diff HEAD

六、rebase——在新位置重新提交

rebase 的意思是,给你的 commit 序列重新设置基础点(也就是父 commit)。展开来说就是,把你指定的 commit 以及它所在的 commit 串,以指定的目标 commit 为基础,依次重新提交一次。

git rebase -i HEAD~2
可以用来实现合并本地多次请求,将pick改成s

### ![](https://img-blog.csdnimg.cn/img_convert/3a4ceeead94352af980b5d487aadbaa4.png#align=left&display=inline&height=409&margin=[object Object]&originHeight=409&originWidth=590&size=0&status=done&style=none&width=590)

小结(3)

本节介绍的是 rebase 指令,它可以改变 commit 序列的基础点。它的使用方式很简单:git rebase 目标基础点
需要说明的是,rebase 是站在需要被 rebasecommit 上进行操作,这点和 merge 是不同的。

七、提交的代码写错怎么办

怎么修复?
当场再写一个修复这几个错别字的 commit?可以是可以,不过还有一个更加优雅和简单的解决方法:commit -—amend
“amend” 是「修正」的意思。在提交时,如果加上 --amend 参数,Git 不会在当前 commit 上增加 commit,而是会把当前 commit 里的内容和暂存区(stageing area)里的内容合并起来后创建一个新的 commit用这个新的 commit 把当前 commit 替换掉。所以 commit --amend 做的事就是它的字面意思:对最新一条 commit 进行修正。
具体地,对于上面这个错误,你就可以把文件中的错别字修改好之后,输入:

git add 文件
git commit --amend

小结

这一节的内容只有一点:用 commit --amend 可以修复当前提交的错误。使用方式:
git commit --amend
需要注意的有一点:commit --amend 并不是直接修改原 commit 的内容,而是生成一条新的 commit

八、丢弃最新的提交

你可以用 reset --hard 来撤销这条 commit
git reset --hard HEAD^

HEAD 表示 HEAD^ 往回数一个位置的 commit
说明:在 Git 中,有两个「偏移符号」: ^~
^ 的用法:在 commit 的后面加一个或多个 ^ 号,可以把 commit 往回偏移,偏移的数量是 ^ 的数量。例如:master^ 表示 master 指向的 commit 之前的那个 commitHEAD^^ 表示 HEAD 所指向的 commit 往前数两个 commit
~ 的用法:在 commit 的后面加上 ~ 号和一个数,可以把 commit 往回偏移,偏移的数量是 ~ 号后面的数。例如:HEAD~5 表示 HEAD 指向的 commit往前数 5 个 commit

九、临时存放工作目录的改动

“stash” 这个词,和它意思比较接近的中文翻译是「藏匿」,是「把东西放在一个秘密的地方以备未来使用」的意思。在 Git 中,stash 指令可以帮你把工作目录的内容全部放在你本地的一个独立的地方,它不会被提交,也不会被删除,你把东西放起来之后就可以去做你的临时工作了,做完以后再来取走,就可以继续之前手头的事了。
具体说来,stash 的用法很简单。当你手头有一件临时工作要做,需要把工作目录暂时清理干净,那么你可以:

git stash

就这么简单,你的工作目录的改动就被清空了,所有改动都被存了起来。
然后你就可以从你当前的工作分支切到 master 去给你的同事打包了……
打完包,切回你的分支,然后:

git stash pop

你之前存储的东西就都回来了。很方便吧?

注意:没有被 track 的文件(即从来没有被 add 过的文件不会被 stash 起来,因为 Git 会忽略它们。如果想把这些文件也一起 stash,可以加上 -u 参数,它是 --include-untracked 的简写。就像这样:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15200.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!