原文地址:Git操作
内置更多技术文章
工作流程
Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS),分为两种类型的仓库:
本地仓库和远程仓库
工作流程如下
1.从远程仓库中克隆或拉取代码到本地仓库(clone/pull)
2.从本地进行代码修改
3.在提交前先将代码提交到暂存区
4.提交到本地仓库。本地仓库中保存修改的各个历史版本
5.修改完成后,需要和团队成员共享代码时,将代码push到远程仓库
下载地址: https://git-scm.com/download 下载后傻瓜式安装,一路next即可
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。
#设置用户信息
git config --global user.name “jvyou”
git config --global user.email “29892960@qq.com”
#查看配置信息
git config --list
git config user.name
#通过上面的命令设置的信息会保存在~/.gitconfig文件中
配置Git的别名可以大幅提高你的工作效率,减少重复输入长指令的时间。
使用命令行方式配置别名非常简单,你可以使用以下命令来为常用的Git指令配置别名:
git config --global alias.别名 "原指令"
例如,要为提交更改的命令git commit -m
配置别名为git ci
,可以使用以下命令:
git config --global alias.ci "commit -m"
这会在全局范围内创建一个Git配置,使得在以后的Git操作中可以使用git ci
代替git commit -m
。
另一种配置别名的方法是在用户的目录下创建配置文件.bashrc
。可以使用文本编辑器打开这个文件,然后手动添加别名。以下是一个示例~/.bashrc
文件的部分内容:
# 用于暑促git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
# 输出当前目录的文件信息
alias ll='ls -al'
在上面的示例中,[alias]
部分包含了一些常用的Git别名,你可以根据自己的需要添加或修改别名。
注意有些用户不能直接创建.bashrc文件,可以通过touch命令创建该文件。
打开GitBash执行:
git config --global core.quotepath false
然后在${git_home}/etc/bash.bashrc
最后添加:
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
# 初始化仓库带工作区
git init
# 初始化仓库不带工作区
git init --bare
提示:如果能看见.git隐藏目录生成,则本地仓库创建成功
本地仓库:是在开发人员自己电脑上的Git仓库,存放我们的代码(.git 隐藏文件夹就是我们的本地仓库)
远程仓库:是在远程服务器上的Git仓库,存放代码(可以是github.com或者gitee.com 上的仓库,或者自己该公司的服务器)
工作区: 我们自己写代码(文档)的地方
暂存区: 在 本地仓库中的一个特殊的文件(index) 叫做暂存区,临时存储我们即将要提交的文件
------------
Clone:克隆,就是将远程仓库复制到本地仓库
Push:推送,就是将本地仓库代码上传到远程仓库
Pull:拉取,就是将远程仓库代码下载到本地仓库,并将代码 克隆到本地工作区
Git目录下对文件的修改会产生以下几个状态:
要查看Git仓库中文件的修改状态,您可以使用以下命令:
# 查看状态
git status
#查看状态 使输出信息更加简洁
git status –s
运行这个命令将显示当前工作目录中文件的状态以及与上次提交的版本之间的差异。git status
命令会告诉您哪些文件已修改、哪些文件已经添加到暂存区、哪些文件未被跟踪等。
输出通常会分为三个部分:
未跟踪文件(Untracked files):这是显示在工作目录中但尚未添加到Git仓库的文件列表。您可能需要使用git add
命令将这些文件添加到暂存区。
已修改但未暂存的文件(Modified files):这是显示已跟踪的文件发生了更改,但这些更改尚未被添加到暂存区的文件列表。您可以使用git add
命令将这些文件添加到暂存区。
已暂存的文件(Changes to be committed):这是显示已经使用git add
命令将文件添加到暂存区的文件列表。这些文件已准备好被提交到Git仓库。
除了上述信息,git status
还会提供其他有关分支和提交的信息,以帮助您了解当前工作目录的状态。
# 将未跟踪的文件加入暂存区
git add <文件名>
# 将暂存区的文件取消暂存 (取消 add )
git reset <文件名>
# 将当前的目录下所有的文件添加到暂存区
git add .
# git commit 将暂存区的文件修改提交到本地仓库
git commit -m "日志信息" <文件名>
要查看Git提交日志,您可以使用以下命令:
git log
git log
还支持许多选项,以满足不同的需求
# 显示所有的分支
git log --all
# 以一行的方式显示提交日志
git log --oneline
# 以图形化的方式显示提交日志
git log --graph
# 在提交哈希值中使用较短的缩写,以减少输出中的字符数量。
git log --abbrev-commit
硬重置(Hard Reset):
硬重置是最彻底的重置类型,将分支指针移动到目标提交,并且会重置暂存区和工作目录的内容,使其与目标提交完全一致。这会丢失工作目录中未提交的更改,所以要小心使用。
git reset --hard <commitID>
# 回退到前一个提交并丢弃工作目录中的更改
git reset --hard HEAD^
提示:
复制快捷键:CTRL+INSERT
粘贴快捷键:SHIFT+INSERT
查看已经删除的提交记录,您可以使用 git reflog
命令。git reflog
显示了仓库中的引用日志,包括分支操作、提交操作等,即使提交已被删除或分支已被移动,也可以在引用日志中找到它们的信息。
git reflog
如果已经退回到之前的版本,可以通过
git reflog
来查看后面版本的commitID。
在Git中,您可以使用.gitignore
文件来指定哪些文件或目录应该被Git忽略,从而不会被包含在提交中。这对于在批量提交时排除特定文件或目录非常有用。
以下是如何在批量提交时忽略某些文件的步骤:
创建或编辑.gitignore
文件:如果您的项目尚未包含.gitignore
文件,您可以在项目的根目录下创建一个。您可以使用文本编辑器来创建或编辑这个文件。
在.gitignore
文件中添加要忽略的文件或目录的模式。每一行代表一个模式,Git将忽略与这些模式匹配的文件或目录。例如,要忽略所有.log
文件,您可以在.gitignore
文件中添加以下内容:
*.log
您还可以使用斜杠 /
来指定特定目录中的文件或目录。例如,要忽略logs/
目录中的所有文件,可以添加以下内容:
logs/
您还可以使用通配符 *
和 ?
来匹配多个文件。例如,要忽略所有以.tmp
结尾的文件,可以添加以下内容:
*.tmp
如果需要更高级的模式匹配,可以使用正则表达式。
保存并提交.gitignore
文件。确保.gitignore
文件被提交到Git仓库中。
执行批量提交时,Git会自动忽略.gitignore
文件中指定的文件或目录,这些文件将不会包含在提交中。
例如,如果您使用git add .
来将所有更改添加到暂存区,并然后运行git commit -m "批量提交"
来提交更改,.gitignore
文件中指定的忽略文件将不会包含在提交中。
通过使用.gitignore
文件,您可以方便地管理哪些文件应该被Git跟踪和提交,哪些文件应该被忽略。这对于排除生成的文件、临时文件、依赖库、配置文件等非必要的文件非常有用。
Git中的分支是用来表示不同的提交历史线的方式。
# 默认 分支名称为 master
# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 列出所有本地分支和远程分支
git branch -a
# 创建分支
git branch <分支名>
# 切换分支
git checkout <分支名>
# 删除分支(如果分支已经修改过,则不允许删除)
git branch -d <分支名>
# 强制删除分支
git branch -D <分支名>
# 合并分支 将其他分支合并至当前工作区
git merge <分支名称>
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
在开发中,一般有如下分支使用原则与流程:
master (生产) 分支\
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
develop (开发) 分支
是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可
以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。
feature/xxxx分支
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
hotfix/xxxx分支
从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、 develop分支,
还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支) 等等。
在Git中,当您尝试合并两个分支时,如果这两个分支在同一文件的相同位置进行了不同的修改,就会产生冲突。Git无法自动确定应该保留哪个更改,因此您需要手动解决冲突。以下是解决合并冲突的一般步骤:
执行合并操作: 首先,您需要运行合并命令。如果您想将一个分支合并到当前分支中,可以使用git merge
命令。例如:
git merge <branch-to-merge>
或者如果您正在进行pull
操作:
git pull origin <branch-to-merge>
冲突标记: 如果合并操作发现冲突,Git会在冲突的文件中插入特殊标记来指示冲突的位置。冲突标记通常具有以下格式:
<<<<<<< HEAD
// 当前分支的更改
=======
// 要合并的分支的更改
>>>>>>> <branch-name>
<<<<<<< HEAD
表示当前分支的更改,=======
是分隔线,>>>>>>> <branch-name>
表示要合并的分支的更改。
手动解决冲突: 打开包含冲突的文件,然后手动编辑文件以解决冲突。您需要决定要保留哪个更改,或者合并两者的内容。删除冲突标记和不需要的代码,只保留您需要的更改。
保存文件: 解决冲突后,保存文件。
添加和提交: 完成冲突解决后,使用git add
命令将文件标记为已解决。然后,使用git commit
命令提交合并的结果。
继续合并: 如果有多个文件存在冲突,您需要重复上述步骤,解决每个文件的冲突。
完成合并: 一旦所有冲突都已解决并提交,您可以完成合并操作。
测试并部署: 在合并完成后,建议进行测试以确保合并没有引入新的问题。如果一切正常,您可以部署或发布合并的更改。
注意事项:
git diff
命令来查看冲突的详细信息,以帮助您更好地理解问题。解决冲突可能需要一些时间和经验,但这是有效团队协作的关键部分。一旦您熟悉了这个过程,您将更容易管理合并冲突。
#生成公钥私钥
ssh-keygen -t rsa
一直回车即可
会默认用户目录 .ssh 目录生成一个默认的id_rsa文件 和id_rsa.pub
ssh 密钥配置
在GitBash输入以下命令检查是否配置成功
ssh -T git@gitee.com
要将本地Git仓库与远程仓库(例如Gitee)绑定,您需要执行以下步骤:
在Gitee上创建一个远程仓库: 如果您还没有在Gitee上创建远程仓库,首先登录到Gitee,然后创建一个新的仓库。您可以在Gitee仓库页面上找到创建仓库的选项。
复制远程仓库的URL: 在Gitee上创建远程仓库后,您将获得一个远程仓库的URL地址,类似于 https://gitee.com/${username}/${repository-name}.git
。复制这个URL。
进入本地Git仓库: 打开终端或命令提示符,并导航到您的本地Git仓库的根目录。
添加远程仓库: 运行以下命令,将远程仓库与本地仓库绑定,并起一个别名(通常命名为 “origin”):
git remote add origin https://gitee.com/${username}/${repository-name}.git
请将URL替换为您在步骤1中复制的Gitee仓库URL,将 “origin” 替换为您想要的远程仓库别名。
验证绑定: 您可以运行以下命令来验证是否成功绑定了远程仓库:
# 显示一配置的远程仓库
git remote
# 显示已配置的远程仓库列表以及它们的URL
git remote -v
推送到远程仓库: 如果您想将本地仓库的更改推送到远程仓库,可以使用 git push
命令。例如,要将本地的 “main” 分支推送到远程仓库的 “main” 分支:
# 基础用法
git push origin 本地分支:远程分支
# 将本地的master分支推送到远程仓库为origin的仓库里面
git push origin master
# -u选项用于将本地分支与远程分支关联,使以后的 `git push` 命令可以自动将更改推送到正确的远程分支。-u 选项的完整写法是 --set-upstream
git push -u origin master
# -f强制将本地仓库的东西覆盖到远程仓库
git push -f origin master
查看本地的分支信息:
git branch -v
和 git branch -vv
都用于查看本地分支的信息,-v
选项会显示本地分支的详细信息,包括每个分支的最新提交的哈希值和提交信息,-vv
选项提供了更多的信息,除了本地分支的详细信息之外,还会显示每个分支的跟踪情况。
首先查看本地的分支情况。
将本地分支与远程分支关联
git push -u origin master
这样绑定在一起就可以使用git branch -vv
查看分支绑定情况了。
以后的推送就直接可以使用git push
如果报错! [rejected] master -> master (fetch first);报错信息如下:
**解决方法:**将你的仓库和你的gitee合并,用填充的方法,即:
git pull --rebase origin master
输入上述命令,其中origin代表你的仓库url,后面的master表示将当前的提交到本地仓库的内容和远程仓库合并;再输入如下命令,即可将本地仓库推送到远程仓库:
git push origin master
使用 git clone
命令并提供要克隆的仓库的URL。
例如,要克隆一个远程仓库(以 GitHub 为例):
git clone https://github.com/username/repo.git
或者,要克隆一个本地仓库:
git clone /path/to/local/repo
克隆操作还会自动为您设置一个默认的远程仓库别名 “origin”,可以使用 git pull
和 git push
等命令与远程仓库进行交互。
抓取(Fetch):
抓取命令示例:
# 从远程仓库拉取 (拉取到.git 目录,不会合并到工作区,工作区发生变化)
git fetch origin <分支名称>
# 手动合并 把某个版本的某个分支合并到当前工作区
git merge origin/<分支名称>
拉取(Pull):
拉取命令示例:
git pull origin master
# 从远程仓库拉取 (拉取到.git 目录,合并到工作区,工作区不发生变化) = fetch+merge
git pull origin <分支名称>
git pull origin <分支名称> --allow-unrelated-histories # 强制拉取合并
区别总结:
注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull命令后加入参数–allow-unrelated-histories (如上 命令)
# 将本地仓库推送至远程仓库的某个分支 git push [remote-name] [branch-name]