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
原因:
- 有一个包含一些提交的新 Git 仓库。然后,您尝试从现有的远程仓库中提取。合并变得不兼容,因为分支和远程拉取的历史不同。当你试图合并两个完全不相关的分支时,Git 看到了这种情况,它不知道该怎么做。
- 目录有问题.git。它可能在某些时候被意外删除或损坏。如果您克隆或清理了项目,则可能会发生这种情况。此处发生错误是因为 Git 没有有关本地项目历史的必要信息。
- 当您尝试从远程仓库推送或拉取数据时,分支位于不同的HEAD位置,并且由于缺乏共性而无法匹配。
解决办法是:
- 在 git pull 和 git push 命令中添加 –allow-unrelated-histories,让git允许提交不关联的历史代码。
- git pull 命令后接上 --rebase,在修改本地代码前,先使用git pull拉取远程最新代码,然后再进行修改
- 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命令来创建一个新的提交,以撤销之前的更改。