Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git配置(git config)
Git 提供了一个叫做git config
的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。
这些变量可以存放在以下三个不同的地方:
· /etc/gitconfig 文件
:系统中对所有用户都普遍适用的配置。若使用 git config 时用 –system 选项,读写的就是这个文件。
· ~/.gitconfig 文件
:用户目录下的配置文件只适用于该用户。若使用 git config 时用 –global 选项,读写的就是这个文件。
· 工作目录中的 .git/config 文件(当前项目的 Git 目录中的配置文件)
:这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings$USER。此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。
Git基础操作步骤
1、 找一个自己想放东西的目录,作为仓库。初始化:
1 | git init |
2、 配置个人信息
1 | git config --global user.name "liuliuliu" |
2-1、查看user信息
1 | git config --global -l |
1
2 user.name=liuliuliu`
`user.email=123456789@qq.com
2-2、查看某个环境变量的设定
1 | git config user.name |
2-3、查看所有配置
1 | git config --list |
2-4、删除
1 | git config --global --unset user.name |
3、 查看隐藏的.git目录
1 | ls -ah |
4、 查看当前仓库状态,有没有什么是改动的、改动未提交的、全部提交
1 | git status |
5、 查看文件的改动情况
1 | git diff |
6、 查看历史记录
1 | git log |
7、 回退到上一个提交的版本,HEAD表示当前版本,HEAD^表示上一个,HEAD~100前一百个
1 | git reset --hard HEAD^ |
8、 忘记id怎么办,用git reflog记录每一次命令
1 | git reflog |
9、 工作区和暂存区

工作区:我们可以看到的目录
暂存区:.git/index
版本库:.git(一般是隐藏的)
git add
就是把文件从工作区提交到暂存区(stage)
git commit
就是把文件从暂存区提交到分支(HEAD->master)
10、查看readme.txt文件工作区和版本库里最新版本的区别
1 | git diff HEAD -- readme.txt |
11、丢弃file文件在工作区的修改
1 | git checkout -- readme.txt |
12、若已经提交到暂存区,那就把暂存区的修改回退到工作区,再清楚工作区的修改
1 | git reset HEAD readme.txt |
13、在工作区删除
1 | rm test.txt |
14、在版本库里删除
1 | git rm test.txt |
15、创建与合并分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
或者git switch <name>
创建+切换分支:git checkout -b <name>
或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
16、解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph
命令可以看到分支合并图。
1 | git log --graph --pretty=oneline --abbrev-commit |
合并禁用fast forward策略,–no-ff参数,表示禁用Fast forward,本次合并要创建一个新的commit,所以加上-m参数,
1 | git merge --no-ff -m "merge with no-ff" dev |
17、多人协作
远程仓库默认名称是master,
首先,多人都从远程库clone,小明创建远程origin的dev分支到本地
1 | git checkout -b dev origin/dev |
小明在本地dev分支上修改然后提交
1 | git push origin(origin:远程仓库名) dev (dev:本地分支名) |
小红也这样推送,发现小明推送在前,有冲突了,于是小红打算git pull
最新的提交,在本地合并,解决冲突,再推送:但是git pull失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,
1 | $ git branch --set-upstream-to=origin/dev dev |
Branch ‘dev’ set up to track remote branch ‘dev’ from ‘origin’.
再次 git pull
就成功了,但是合并有冲突,需要手动解决,解决完再commit,再push
GitLab的使用 - AIClass
公司AIClass网址http://47.94.6.102/
1、 设置SSH key: http://47.94.6.102/help/ssh/README, 这是保证你能够commit, push的基础。如果没有设置SSH key, 你只能clone,没有办法修改。
1-1、生成秘钥ssh key
1 | ssh-keygen -t rsa -C [123456789@qq.com] |
【出现问题】
书写:ssh -keygen -t rsa -C [123456789@qq.com]
问题:Bad escape character ‘ygen’
原因:Ssh与-keygen没有空格
改正:ssh-keygen -t rsa -C [123456789@qq.com]
1-2、获取秘钥
1 | cat /c/Users/HP-X/.ssh/id_rsa.pub |
1-3、粘贴到gitlab
打开设置—SSH—粘贴密钥内容到框内
2、Fork git_practice项目到你的空间里,点击fork即可。
3、git clone到你自己的本地硬盘上,完成之后你的本地硬盘会有下载下来的文件夹。 W
1 | git clone git@47.94.6.102:AIclass/Week1_PythonFundamentals.git |
4、建立新的文件,取名为 test.py , 并在文件里输入 print(“hello world”), 保存并close.
1 | touch test.py |
i进入编辑模式
:进入底线命令模式w保存q退出
Linux vi/vim | 菜鸟教程 (runoob.com)
1、 利用git diff看一下有什么前后的区别,确认你修改的是正确的。
git diff命令用于显示提交和工作树等之间的更改。此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
$ git diff
warning: LF will be replaced by CRLF in test.py.
The file will have its original line endings in your working directory
diff –git a/test.py b/test.py
index eb7f361…8e467a5 100644
— a/test.py
+++ b/test.py
@@ -1 +1,2 @@
-hello,This is a python file.20210816
\ No newline at end of file
+hello,This is a python file.20210816
+hello.Today is 20210817.
2、 使用git add命令把上述新的文件加入进去
1 | git add test.py |
7、利用git status查看最新的情况,确认是否这个文件已经被加进去
$ git status
On branch master
Your branch is up to date with ‘origin/master’.
Changes to be committed:
(use “git restore –staged …” to unstage)
modified: test.py
8、利用git commit -m “your message”, 来commit目前为止的改变,目前为止的所有改动将被记录成历史。
1 | git commit -m "update_test.py_0817_16:24" |
9、利用git push origin master来提交你的改动,这将会把最新改动上传到服务器上。
1 | git push origin master |
10、查看服务器上是否已经有了你的改动,确认即可完成。
11、在本地上,重新打开test.py文件,并在文件中加入一行新的字符串,并保存。
12、重复上述过程,把更新的内容push到服务器端,并检查最后的结果。
Git命令行教程 - AIClass
**Git global setup ** (Git配置)
1 | git config --global user.name "123456789" |
Create a new repository (克隆一个新仓库)
1 | git clone git@47.94.6.102:AIclass/Week1_PythonFundamentals.git |
Existing folder (在自己目录下创建一个本地仓库,在本地仓库内提取一个远程仓库)
1 | cd existing_folder |
Existing Git repository (已有一个本地仓库了,进入仓库提取远程仓库,和上面基本一样)
1 | cd existing_repo |
Gitlab fork项目如何同步源项目更新
1、查看配置
1 | git remote -v |
2、 添加源项目地址
1 | git remote add upstream(根名)git@47.94.6.102:AIclass/Week1_PythonFundamentals.git |
3、 查看添加源项目地址后的配置
1 | git remote -v |
4、 获取源项目更新
1 | git fetch upstream |
5、 合并原项目更新
1 | git merge upstream/master |
Git基本操作总结

【Git 基本操作】
git init :初始化仓库
git clone :拷贝一份远程仓库,也就是下载一个项目
【提交与修改】
git add :添加文件到暂存区
git status :查看仓库当前状态,显示有变更的文件
git diff :比较文件的不同,即暂存区和工作区的差异
git commit :提交暂存区内容到本地仓库
git reset :回退版本?
git rm :删除工作区文件
git mv :移动或重命名工作区文件
【提交日志】
git log :查看历史提交记录(commit)
git blame :以列表形式查看指定文件的历史修改记录
git log –oneline :查看历史记录的简洁的版本
git log –reverse –oneline :逆向显示所有日志
git log –graph :查看历史中什么时候出现了分支、合并
【远程操作】
git remote :远程仓库操作
git fetch :从远处获取代码库
git pull :下载远程代码并合并
git push :上传远程代码并合并
【分支管理】
git branch :列出本地所有分支
git branch (branchname):创建分支
git branch -b (branchname):创建分支并立即切换到该分支下
git branch -d (branchname):删除分支
git checkout (branchname):切换分支
git merge (name):合并分支
【合并冲突】
【其他命令】
echo :显示一行代码
touch :更改时间戳
cat :串联文件并在标准输出上打印
【添加远程库】
git remote add [ 新的仓库名] [url]
例:git remote add origin2 git@github.com:tianqixin/runoob-git-test.git
git remote :查看当前配置有哪些远程仓库
git remote -v :看到每个别名的实际链接地址
【提取远程仓库】
git fetch:从远程仓库下载新分支与数据。
例:git fetch origin master 从名为origin的远程上拉取名为master的分支到本地分支origin/master中
git merge:把远程分支合并到当前你要用的分支。
例:git fetch origin/master:合并名为origin/master的分支到当前所在分支。
【推送到远程仓库】
git push [alias] [branch] 推送你的新分支与数据到某个远端仓库。将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支。
例:git push origin master:推送本地的master分支到远程origin
【删除远程仓库】
git remote rm [别名]
【删除本地仓库】
1、 git branch:显示所有本地分支
2、 git init 初始化本地版本库
3、 ls -a:找到目录下的.git
4、 rm -rf .git:删除git。此时可以看到master分支已经删除
5、 rm -rf [本地文件夹]:删除本地文件夹
遇到一个好的仓库,如何开始操作
1、fork老师的仓库
2、克隆自己的仓库内容到本地
3、增加老师仓库地址到项目远程分支列表中get remote
3、在本地把内容修改后,上传到自己的仓库
4、老师仓库内容更新后,我get fetch的是什么样的仓库内容?
【知乎-Git更新fork的项目】
1、clone 自己的 fork 分支到本地,可以直接使用Git 客户端,clone 到本地,如果使用命令行,命令为:$ git clone xxx
2、进入仓库,增加源分支地址到你项目远程分支列表中,此处是关键,先得将源仓库指定为 upstream,命令为:$ git remote add upstream xxx
此处可使用git remote -v查看远程分支列表
3、fetch 源分支的新版本到本地 $ git fetch upstream
4、切换到本地master分支 $ git checkout master
5、合并两个版本的代码 $ git merge upstream/master
6、将合并后的代码push上去 $ git push origin maste
其他有关Git的信息
GitLab仍然要面对本土开源平台的强力竞争,例如阿里云Code、腾讯云开发者平台、百度效率云、华为开源代码托管平台、码云(gitee)、码市等。