Git 必知必会的操作命令

有时候一段时间没有去使用Git,一些操作就容易忘记,故此这里把一些基本常用的操作记录一下,方便大家学习和查看。

1. 本地库初始化

命令:git init

初始化之后,会创建一个隐藏的 .git 文件,可以查看一下。
查看隐藏文件,命令:ls -la

看一下 .git 文件下有什么,命令:ll .git/

注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。

2. 签名以及查看并设置签名

签名形式:
user = xxx
email = xxxx

签名作用: 用于区分不同的开发人员身份(其中的用户名和邮箱其实并不会去验证真实性和有效性,主要是用于区分不同的开发人员)。

注意: 签名和登录远程库的账号、密码没有任何关系。

项目级别/仓库级别: 仅在当前本地库范围内有效

相关命令:

查看项目级别的签名信息
cat .git/config 

添加项目级别签名的用户名
git config user.name xxx

添加项目级别签名的邮箱
git config user.email xxx@xx.com 

系统用户级别: 登录当前操作系统的用户范围

相关命令:

查看系统用户级别的签名信息
cat ~/.gitconfig

添加系统用户级别签名的用户名
git config --global user.name xxx

添加系统用户级别签名的邮箱
git config --global user.email xxx@xx.com 

级别优先级

就近原则:项目级别优先于系统用户级别,也就是二者都有时,优先使用项目级别的签名;没有项目级别签名时,使用系统用户级别的签名。

一般设置一个系统用户级别的签名就可以了,项目有特殊需求时再单独设置项目级别的签名。

3. 基本操作

先了解一下Git 结构:

3.1 查看状态

命令:git status

用于查看工作区、暂存区状态。

3.2 添加到暂存区

命令:git add fileName

将对工作区的 “新建/修改” 添加到暂存区

3.3 提交到本地库

命令:git commit -m “commit message” [fileName]

将暂存区的内容提交到本地库。

如果不指定文件,会将所有暂存区的提交上去。

-m 是用来附带提交信息,如果不带 -m 参数:git commit fileName

那么会进入一个 vim 编辑器的编辑文件里,在这里个里面编辑提交附带的信息。

4. 版本控制

4.1 查看历史记录

  1. 命令:git log
    多屏显示控制方式:
    空格向下翻页
    b 向上翻页
    q 退出
    注意,这个命令只能显示当前版本之前提交的版本。

  1. 命令:git log --pretty=oneline
    每个版本以一行显示,只显示索引值和提交信息,略去提交时间和提交用户的信息。
    注意,这个命令只能显示当前版本之前提交的版本。

  2. 命令:git log --oneline
    每个版本以一行显示,只显示部分索引值(这一部分索引值足以区分不同版本)和提交信息。
    注意,这个命令只能显示当前版本之前提交的版本。

  3. git reflog

    每个版本以一行显示,显示部分索引值和提交信息,并且显示了从当前所在版本到该版本需要移动的步数。

    HEAD@{移动到当前版本需要多少步}

4.2 版本的改变

4.2.1 版本改变的基本操作

本质其实是将 HEAD 指针移动并指向需要的版本。

  1. 基于索引值操作(推荐)命令:git reset --hard 索引值
    这个索引值可以是查看历史记录中显示那个部分索引值。
    要去哪个版本,就加哪个版本的索引值。

  2. 使用 ^ 符号,命令:git reset --hard HEAD^
    只能向后退,一个 ^ 表示向后退一步,n 个 ^ 表示向后退 n 步。

  3. 使用 ~ 符号,命令:git reset --hard HEAD~n
    只能向后退,表示向后退 n 步。

4.2.2 版本改变命令的三个参数(sort、mixed、hard)
  1. –sort
    仅仅在本地库移动 HEAD 指针

  2. –mixed
    在本地库移动 HEAD 指针
    重置暂存区

  3. –hard (常用)
    在本地库移动 HEAD 指针
    重置暂存区
    重置工作区

4.2.4 关于删除文件的恢复

直接使用版本改变命令回到文件删除之前即可。

git reset --hard [存在该文件时的版本索引]

注意: 只有文件被 commit 过的文件才能找回。

4.2.5 比较文件差异
  1. 命令:git diff [fileName]

    将工作区中的文件和暂存区进行比较

  2. 命令:git diff [本地库中历史版本索引值][文件名]
    将工作区中的文件和本地库历史记录中的文件比较

  3. 命令:git diff [本地库中历史版本索引值]
    只带版本索引值,不带文件名,比较的是当前版本和指定历史版本中的多个文件

5. 分支管理

5.1 分支的概念

我们版本初始化好之后,就会有个 master 分支(也可以称为主干)。

分支的话就好像是从主干分出一条线出来,和主干互不影响,可以独立开发,当需要的功能开发完成后,可以将功能合并到主干上;如果开发失败或取消开发,可以直接删除这个分支,对主干没有任何影响。

5.2 分支的好处

  1. 可以在多个分支上并行推进多个功能的开发,提高开发效率。
  2. 一个分支开发失败,并不会对其他分支造成影响,可以直接将失败的分支删除或重新开始。

5.3 分支的操作

5.3.1 创建分支

命令:git branch [新建的分支名]

5.3.2 查看分支

命令: git branch -v

5.3.3 切换分支

命令:git branch [所要切换的分支名]

上面三个命令的演示:

5.3.4 合并分支

例子: 分支1 上的修改合并到 master 分支上。

  1. 切换到要接受合并的分支(比如例子中的 master 分支)。
    git checkout [接受合并的分支]

  2. 执行合并命令
    git merge [有修改的分支,比如例子中的 分支1 ]

5.3.4 解决合并分支中的冲突

分支冲突:合并的两个分支对同一个文件做了不同的修改,产生了冲突,Git不知道该保留谁的。

解决冲突的合并:

  1. 编辑冲突的文件

  2. 将文件的冲突处修改成所需要的,并将特殊符号全部删除掉,然后保存退出。

  3. 将文件添加到暂存区:git add [刚刚冲突的文件名]

  4. 将修改提交上去:git commit -m “提交附带日志信息”
    注意:这次的 commit 最后面一定不能带文件名。

6. 远程库相关操作

远程库:比如 GitHub 上的仓库。

远程库地址:比如 GitHub 上仓库的地址。

6.1 设置远程库地址别名

命令:git remote add [远程库地址别名] [远程库地址]

当然,虽然不设置别名也可以用,不过远程库地址一般比较长,使用起来很不方便,所有最好设置一下别名。

6.2查看当前所有远程库地址别名

命令:git remote -v

6.3 推送

命令:git push [远程库地址别名] [要推送的分支名]

将本地库中的某个分支推送到远程库中。

6.4 拉取

命令:git pull [远程库地址别名] [远程库分支名]

从远程库拉取某个分支到本地并合并。

pull = fetch +merge

git pull 其实是两个操作的组合,这两个操作也可以单独执行。

  1. 命令①:git fetch [远程库地址别名] [远程库分支名]
    将远程库最新内容拉取到本地库,但是不会自动merge。

  2. 命令②:git merge [远程地址库别名/远程库分支名]

    合并刚刚拉取下来的远程库。

6.4 解决冲突

如果我们 push 推送的时候不是基于最新版的远程库,那么就会产生冲突。

那么我们就要先将远程库的最新版 pull 拉取下来,解决了冲突并合并之后,再 push 推送上去。

解决合并分支中的冲突的方法和 5.3.4 中一样,修改冲突文件,然后 add 和 commit 。

6.5 克隆

命令:git clone [远程库地址]

会自动初始化本地库,还会自动创建远程库别名 origin,并且将完整的远程库下载到本地。

也就是说一个 clone 其实里面有三个步骤:

  1. 初始化本地库
  2. 创建远程库地址别名:origin
  3. 完整的将远程库下载到本地。

7. IDE 中的忽略文件

各个IDE中如何使用Git就不去说了,因为是图形化界面,一般都比较简单,实在不会的,可以找个教程看看。

这里最后说一下关于忽略文件。

因为一个团队大家使用的 IDE 可能不太同,相关工 程特定文件就有可能不同。如果这些文件加入版本控制,那么开发时很可能需要为了这些文件解决冲突,给打开造成不必要的麻烦。

所以可以在IDE中设置一个忽略文件,每次上传时自动忽略这些特定文件。

因为不同的 IDE 设置方法不太同,这里也不针对每个IDE说了。

我这里说一下 Intellij IDEA 怎么设置忽略文件:

忽略文件中的内容,可根据你项目使用的开发语言去选择。

可以去官网查看和选择:

https://github.com/github/gitignore

比如Java的:

# Compiled class file
*.class

# Log file
*.log

# BlueJ files
*.ctxt

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

.classpath
.project
.settings
target

这些命令其实都不难,但一定要多去练练,多去练练就会了。

看完之后,如果还有什么不懂的,可以在评论区留言,会及时回答更新。

点个关注,不再迷路

这里是猿兄,为你分享程序员的世界。

非常感谢各位大佬们能看到这里,如果觉得文章还不错的话,
求点赞👍 求关注💗 求分享👬求评论📝
这些对猿兄来说真的 非常有用!!!

注: 如果猿兄这篇博客有任何错误和建议,欢迎大家留言,不胜感激!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值