Git 的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践 | 青训营

83 阅读4分钟

1 基本指令

$ git clone     克隆远程仓库
$ git add       将新的变更添加到暂存区
$ git commit  	将暂存区的修改提交到本地仓库
$ git push      将本地仓库的内容推送到远程仓库
$ git pull 	    将远程仓库的内容拉到本地仓库
$ git publish   布吉岛(看完视频依然是布吉岛)

publish从来没用过唉

2 查看版本

$ git -v

3 仓库配置

3.1 初始化(创建仓库)

$ git init

查看HEAD,发现默认指向master分支

3.2 配置仓库

$ git config [配置名称] [参数]

这个就是操作的配置项,可以打开文件直接改

3.3 全局配置

上方的配置都是对单独的仓库进行配置,当有多个仓库的时候,这就很不实用

4 文件操作

4.1 工作区到暂存区

$ git add [文件名]
#文件名可以使用正则,比如 . 或者 *txt 这种
# 及时使用 git add .这类操作,也只会将有修改的文件添加,已经添加且没有修改的文件不会被再添加

4.2 从暂存区中移除

$ git rm --cached [文件名]

4.3 暂存区到存储区

$ git commit -m [消息]

4.4 恢复

4.4.1 从存储区到工作区

$ git restore [文件名]

但是如果删除这个操作已经提交出去了,则没有办法恢复(因为存储区已经没有这个文件了)

4.4.2 重置版本

$ git reset --hard [版本号]

就是恢复到之前的版本,使用hard方式会丢失记录

4.4.3 还原

$ git revert [版本号]

注意这里还原的是删除这一步

5 查看日志

$ git log --oneline
# oneline表示一行行

# 直接用也是OK的
$ git log

6 分支操作

分支是基于提交的,如果没有任何提交,就不能完成创建分支的操作

6.1 创建分支

$ git branch [分支名称]

6.2 查看分支

$ git branch -v

6.3 切换分支

$ git checkout [分支名]

6.4 创建并切换分支

$ git checkout -b [名称]

6.5 删除分支

$ git branch -d [名称]

7 合并和冲突

7.1 合并

$ git merge [分支b]
# 如果分支A要合并分支B,则需要切换至分支A,在分支A中进行合并分支B的操作

7.2 冲突

现在order分支合并到master分支上,但是他们都对C.TXT文件做了操作,这时候必须处理冲突

7.2.1 手动处理冲突

直接改成一个新文件,然后提交

8 标签操作

就是给版本号起一个别名

8.1 打标签

标签不可重复

$ git tag [别名] [版本号]

8.2 查看标签

$ git tag

8.3 使用标签

# 也就日志这种操作需要的比较多
$ git log [版本号/标签名]

8.4 删除标签

$ git tag -d [名称]

9 远程仓库

# 移除
$ git remote remove [远程仓库名]
# 更名
$ git remote rename [远程仓库名] [新远程仓库名]
# 推送到远程
$ git push [远程仓库名]
# 拉取
$ git pull [远程仓库名]

好像从远程克隆git clone [xxxx]就会自动配置好这个remote为克隆的远程仓库

10 创建远程仓库别名

$ git remote -v # 查看当前所有远程地址别名
$ git remote add [远程地址] # 起别名

我遇到的问题汇总

1 初始化远程仓库后

在托管平台创建了新的远程仓库,我需要将我的代码提交上去。

目前情况是:

  • 我写了代码,但是并没有指定远程仓库(无论有没有git init,也就是我的版本号根本不在真正仓库的历史里面),没有进行过拉取,也没有进行过推。

这时候进行 git push 仓库名 分支,会报:

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

提示我们要先拉取远程仓库的版本。

然后我们如果只输入 git pull 仓库名 分支 这个命令会报:

fatal: refusing to merge unrelated histories

原因:

  1. 有一个包含一些提交的新 Git 仓库。然后,您尝试从现有的远程仓库中提取。合并变得不兼容,因为分支和远程拉取的历史不同。当你试图合并两个完全不相关的分支时,Git 看到了这种情况,它不知道该怎么做。
  2. 目录有问题.git。它可能在某些时候被意外删除或损坏。如果您克隆或清理了项目,则可能会发生这种情况。此处发生错误是因为 Git 没有有关本地项目历史的必要信息。
  3. 当您尝试从远程仓库推送或拉取数据时,分支位于不同的HEAD位置,并且由于缺乏共性而无法匹配。

解决办法是:

  1. 在 git pull 和 git push 命令中添加 –allow-unrelated-histories,让git允许提交不关联的历史代码。
  2. git pull 命令后接上 --rebase,在修改本地代码前,先使用git pull拉取远程最新代码,然后再进行修改
  3. git push 命令后接上 --force,在确认代码无误的情况下,直接使用--force强制推送要取消已经commit但尚未push的更改,您可以使用以下命令来撤销最新的commit:
git reset HEAD^

2 如何撤销 commit

撤销最近的commit,同时将更改保留在工作目录中。如果想撤销commit并且还想保留更改内容,可以使用--soft选项:

git reset --soft HEAD^

如果希望撤销commit并且丢弃更改内容,可以使用--hard选项:

git reset --hard HEAD^

请注意,使用--hard选项会永久丢失您的更改,所以请谨慎使用。

撤销commit后,可以再次进行修改并重新commit,或者修改内容后再使用git add命令添加到暂存区,然后再次commit。在push之前,可以多次修改和commit,直到满意为止。

另外,如果已经将更改推送到远程仓库,最好不要使用git reset命令来撤销commit,因为这可能会导致其他协作者的问题。在这种情况下,推荐使用git revert命令来创建一个新的提交,以撤销之前的更改。