Git相关操作

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
2
git config --global user.name "liuliuliu"
git config --global user.email [123456789@qq.com]

2-1、查看user信息

1
git config --global -l
1
2
user.name=liuliuliu`
`user.email=123456789@qq.com

2-2、查看某个环境变量的设定

1
2
git config user.name
git config user.email

2-3、查看所有配置

1
git config --list

2-4、删除

1
2
git config --global --unset user.name
git config --global --unset user.email

3、 查看隐藏的.git目录

1
ls -ah

4、 查看当前仓库状态,有没有什么是改动的、改动未提交的、全部提交

1
git status

5、 查看文件的改动情况

1
git diff

6、 查看历史记录

1
2
git log
git log --pretty=oneline(显示成一行)

7、 回退到上一个提交的版本,HEAD表示当前版本,HEAD^表示上一个,HEAD~100前一百个

1
2
git reset --hard HEAD^
git reset --hard b8a8(根据提交的id回退)

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
2
touch test.py
vim 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
2
git config --global user.name "123456789"
git config --global user.email "123456789@qq.com"

Create a new repository (克隆一个新仓库)

1
2
3
4
5
6
git clone git@47.94.6.102:AIclass/Week1_PythonFundamentals.git
cd Week1_PythonFundamentals
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

Existing folder (在自己目录下创建一个本地仓库,在本地仓库内提取一个远程仓库)

1
2
3
4
5
6
cd existing_folder
git init
git remote add origin git@47.94.6.102:AIclass/Week1_PythonFundamentals.git
git add .
git commit -m "Initial commit"
git push -u origin master

Existing Git repository (已有一个本地仓库了,进入仓库提取远程仓库,和上面基本一样)

1
2
3
4
cd existing_repo
git remote add origin git@47.94.6.102:AIclass/Week1_PythonFundamentals.git
git push -u origin --all
git push -u origin –tags

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):合并分支

【合并冲突】

Git 分支管理 | 菜鸟教程 (runoob.com)

【其他命令】

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)、码市等。