编程_Git基础教程

Git基础

一、安装配置:

1、安装:

macOSHomebrew安装为例:

1、安装Homebrew

官网有安装命令:https://brew.sh/

Install Homebrew下面那行命令复制粘贴到Terminal中,回车就好了

2、运用Homebrew安装git:

Terminal中运行:brew install git

(还有其他方法,and其他系统的安装方法,Git官网中都可以找得到)

2、配置

Git 提供了一个叫做git config的工具,专门用来配置或读取相应的工作环境变量。

这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

1、~/etc/gitconfig 文件:系统中对所有用户都普遍适用的配置,用git config —system读写(操作系统可以设置多个用户)

2、~/.gitconfig 文件:用户目录下的配置文件,只适用于该用户,用git config —global读写

3、xxx/.git/config 文件:当前项目Git目录的配置文件,只适用于当前项目

(这三个文件中的配置,下面的会覆盖上面的)(即:优先级从低到高)

3、配置用户信息

设置怎样显示自己的提交。例如:

git config --global user.name xxx # 设置用户名
git config --global user.email xxx.com # 设置邮箱

git config --global —unset user.name # 删除用户名设置
git config --global —unset user.email # 删除邮箱设置

4、忽略文件:.gitignore

有些文件是不需要同步的,如:三方库

Apple开发举例:Pods文件夹下的所有三方库,可以根据Podfilecocopods下载就行

需要忽略的文件可以用.gitignore设置,github上有个库保存了各个语言适用的gitignore文件,需要的可以自取:https://github.com/github/gitignore


二、基本概念:

在这里插入图片描述
图片来自:菜鸟教程

1、工作区workspace:就是我们敲代码编辑文件的地方

2、暂存区staging area:修改过的文件需要暂存后才能commit

3、本地版本库local repository:将暂存区的代码commit后,就会存在本地仓库。(本地可以保存多个commit,后一起提交)

4、远程版本库remote repositorycommit后的代码push后,就会提交到远程仓库了。(就可以在云端上保存你的代码了)


三、基本操作:

按正常工作流程的顺序介绍,接下来的命令说明中:

<>:表示应该根据情况填写不同的值

[]:表示可选参数

1、Init、Clone

git init # 初始化项目,生成.git文件夹,开始记录代码修改提交
git remote add origin https://gitee.com/momo/demo.git # origin代替远程仓库地址

就可以在项目文件中看到.git文件夹(默认隐藏),所有此项目相关的快照数据都会存放在这里

git clone https://github.com/XXX.git # 拷贝一份远程仓库,即下载一个项目

2、Status 状态

git status # 查看上次提交后文件的修改情况)
git status -s # 简洁显示

3、Add 添加

add命令可以将文件添加到暂存区:

git add . # 添加所有文件
git add hello.txt readme.md … # 添加指定文件
git add dir # 添加指定文件夹

4、RM 删除

git rm hello.txt # 将文件从工作区中删除
git rm -f hello.txt # 已经放到暂存区的文件,需要使用强制删除指令-f
git rm —cached hello.txt # 将文件从暂存区中移除,但保留在工作区
git rm -r * # 递归删除当前目录下的所有文件和子文件

5、MV 重命名/移动

git mv readme readme.md # 重命名文件
git mv readme dir # 移动文件

6、Stash 存储

git stash # 将当前修改存储起来
git stash list # 查看存储列表
git stash clear # 清除所有存储
git stash pop # 应用最后一次存储,并删除
git stash apply # 恢复最近一次存储
git stash apply stash@{2} # 恢复某一次存储
git stash drop stash@{2} # 删除某一次存储

7、Pull 拉取

git pull 其实就是 git fetchgit merge FETCH_HEAD 的简写。格式如下:

git pull <远程主机名> <远程分支名>:<本地分支名>`

# 从远程获取代码,并合并本地的版本
git pull # 拉取更新)
git pull -r # rebase:没有 merge 那个提交 
git pull origin # 更新
git pull origin dev # 拉取dev分支

如:

# 将远程主机`origin`的`master`分支拉取过来,与本地的`dev分支合并
git pull origin master:dev 

# 如果需要合并的是当前分支,则冒号后面的分支名可以省略
git pull origin master 

8、Diff 比较文件差异

git diff [file] # 工作区-暂存区,可以指定文件
git diff --stat # 简洁显示
git diff —staged [commitID] [file] # 暂存区和上一次`commit`的差异:(可以指定`commitID`和文件
git diff —cached [commitID] [file] # 同上
git diff [commitID1] [commitID2] # 两次提交差异

9、Commit 提交

提交暂存区到本地仓库

git commit -m [message] # `message`:提交日志
git commit [file1] [file2] ... -m [message] # 提交指定文件

# 如果需要提交的文件,不想一个一个的`add`到暂存区,可以使用`-a`参数:
git commit -a -m [message] # `-a`会提交`Untracked`状态的内容(`Untracked`:未暂存)

10、Reset 撤销修改

git reset # 将暂存区文件重置到跟上一次`commit`保持一致,工作区文件保持不变
git reset HEAD^ # 回退所有内容到上一个提交
git reset HEAD^^ # 回到上上个提交
git reset HEAD~1 # 回到上一个版本 可以写:1~100)
git reset HEAD^ hello.txt # 回退hello文件)
git reset <commitID> # 回滚提交记录,但本地代码不回滚)
git reset --hard HEAD # 撤销工作区和暂存区的所有内容,慎用!
git reset --hard <commintID> # 回滚提交记录和本地代码)

# reset`会清掉指定`commitID`后的所有提交,已提交远端的记录回滚,慎用!!!
git reset --soft HEAD^ # 软撤销)

11、Revert 还原提交

git revert <commitID> 还原指定提交(会直接生成新的commit,等待push)
Tips:如果需要还原多次commit,应该按commit的逆序revert,才不会冲突。

12、Push 上传

将本地的分支提交上传到远程分支并合并,命令格式如下:

git push <远程主机名> <本地分支名>:<远程分支名>
git push <远程主机名> <本地分支名> # 如果本地分支和远程分支同名,可以省略冒号后的远程分支名
git push <远程分支名>

# 例:
git push origin master:master # 将本地的 `master`分支推送到 `origin` 主机的 `master` 分支
git push origin master # 同上)
git push origin HEAD:refs/for/master
git push origin HEAD:refs/for/podplus
git push origin --delete master # 删除 `origin` 主机的 `master` 分支,慎用!

13、Log 查看日志

git log # 查看历史提交记录
git log —oneline # 简洁输出
git log —graph —oneline # 显示修改详情
git blame <file> # 以列表形式查看指定文件的历史修改记录
git log [-p] master..dev # dev分支相比master分支有哪些不同的提交(仅包含分支的提交)
git log [-p] master…dev # dev分支和master分支有哪些不同的提交(包含拉出分支后master的所有提交

14、Branch 分支

git branch # 列出本地分支
git branch dev # 创建`dev`分支
git branch -d <分支名> # 删除已经合并过的分支
git branch -D <分支名> # 强制删除未合并的分支
git checkout dev # 切换到`dev`分支
git merge dev # 将`dev`分支合并到当前分支[如:`master`分支]上
  • 如果有冲突,需要处理:
    分隔符上部分:当前分支内容
    分隔符下部分:远程分支内容

  • 处理非文本文件冲突:

git checkout —theirs lib/base.all # 采用远程分支
git checkout —ours lib/base.all # 采用本地分支
# 如果冲突暂时解决不了,就可以撤销合并
git merge —abort # 撤销合并

15、Cherry-pick 引入更改

git cherry-pick <commitID> # 引入某个提交的修改
git cherry-pick --edit <commitID> # 引入某个提交的修改,并编辑其commit msg
git cherry-pick --e <commitID> # 引入某个提交的修改,并编辑其commit msg
git cherry-pick <commitID1> <commitID1># 引入多个提交
git cherry-pick <commitID1><commitIDn> # 引入从`commitID1`到`commitID1n`的所有提交
git cherry-pick <commitID1>^…<commitIDn> # 包含`commitID1`
git cherry-pick <branchID> # 引入某个分支上的最后一个的提交的修改

16、Tag标签

如果项目达到一个重要的阶段,并希望永远记住那个特别的提交,可以使用git tag给它打上标签

git tag [-a] v1.0 # 不用`-a`,不会记录打标签的时间、用户,不能添加注解
git tag -a v0.9 <commitID> # 给已经提交的commit追加标签

四、补充

1、merge和rebase的区别

将dev分支合并到当前分支:

git merge dev
git rebase dev
  • Merge:形成一个新的节点

    处理冲突更直接

    适用于:公共分支的代码同步和合并

  • Rebase:把分支的commit”剪”下来,然后追加到主干 (commitID会跟原dev分支上的不同)

    如果此时dev还需要同步master的代码,dev分支就会有两份不同commitID的相同提交,中间还会插一个新的commintID

    能够保证清晰的commit记录

    适用于:个人未提交远端的commint记录的优化

举例:用rebase的方式反向合入master分支的代码:

git rebase master
git merge --continue

2、合并Commit

git rebase -i [合并后需要接的上一个提交commitID]

// 按 I开始编辑

// pick 的意思是要会执行这个 commit

// squash 的意思是这个 commit 会被合并到前一个commit

将需要合并的pick改成squash

ESC ,输入 wq(保存退出)

此时本地的多个commit就合成了一个了,再push。。。


3、修改commit message

3.1、修改最后一条commit message

git commit --amend

3.2、修改任意一条commit message

git rebase -i HEAD~2 # 倒数第几条,从1开始
# 按`I`,进入编辑,将需要修改的`commit`前面的`pick`修改为`edit`;
# 编辑方式:按`Esc`,按`:`,输入`:wq`,回车
git commit --amend # 修改2.2指定的commit message(编辑方式如上)
git commit --continue # 完成 rebase)

4、命令行记不住怎么办?

git help xxx(可以查询相应命令的参数格式)

如:

git help config
git help commit

# 可能会用到的一些系统命令:
touch readme.md # 新建一个文件
vim readme.md # 打开一个文件编辑

参考:

Git官网:https://git-scm.com/

菜鸟教程:https://www.runoob.com/git/git-tutorial.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小莫同学~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值