Git是一个分布式版本控制系统,用于跟踪文件的变化并协调多人在同一项目上的工作。它具有强大的分支支持、快速的操作速度和广泛的应用,是现代软件开发中必不可少的工具之一。
bashsudo apt update sudo apt install git
bashsudo yum install git
或者dnf安装
bashsudo dnf install git
bashsudo pacman -S git
如果你希望使用最新版本的Git,或者无法通过包管理器安装,你也可以从源代码编译安装Git:
首先,你需要安装一些编译工具和依赖项。在大多数发行版上,你可以通过包管理器安装这些依赖项。例如,在Ubuntu上:
bashsudo apt install build-essential libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext unzip
然后,从Git的官方仓库中下载源代码:
bashwget https://github.com/git/git/archive/refs/tags/v2.33.0.tar.gz
注意:请替换URL中的版本号为你想要安装的Git版本。
解压源代码:
bashtar -zxvf v2.33.0.tar.gz
进入解压后的目录并编译安装:
bashcd git-2.33.0
make prefix=/usr/local all
sudo make prefix=/usr/local install
这将把Git安装到 /usr/local 目录下。
验证安装
安装完成后,你可以通过以下命令验证是否成功安装了Git:
bashgit --version
如果成功安装,你将会看到Git的版本信息。
bash30372@GYC MINGW64 /e/tmp/gittest $ git -v git version 2.45.2.windows.1
bashgit config --global user.name "Your Name"
有空格必须加""
--global 代表全局配置(不加则为本仓库的配置)
bashgit config --global user.email "mail@example.com"
bashgit config --global credential.helper store
bashgit config --global --list
user.email=gyc0109@gmail.com
user.name=gyc
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
difftool.sourcetree.cmd=''
mergetool.sourcetree.cmd=''
mergetool.sourcetree.trustexitcode=true
merge.tool=ultracompare
mergetool.ultracompare.keepbackup=false
mergetool.ultracompare.trustexitcode=false
mergetool.ultracompare.prompt=false
mergetool.ultracompare.cmd="C:\Program Files\IDM Computer Solutions\UltraCompare\uc.exe" -gitm $LOCAL $REMOTE $BASE $MERGED -title1 LOCAL -title2 REMOTE
uc.defdiffmerge=yes
uc.defdiff=yes
diff.tool=ultracompare
difftool.ultracompare.keepbackup=false
difftool.ultracompare.trustexitcode=false
difftool.ultracompare.prompt=false
difftool.ultracompare.cmd="C:\Program Files\IDM Computer Solutions\UltraCompare\uc.exe" -gitdt $LOCAL $REMOTE $BASE $MERGED -title1 LOCAL -title2 REMOTE
credential.helper=store
credential.https://gitee.com.provider=generic
core.autocrlf=true
bash30372@GYC MINGW64 /e/tmp/gittest $ git config --global user.email gyc0109@gmail.com 30372@GYC MINGW64 /e/tmp/gittest $ git config --global user.name gyc
bashgit init <project-name>
bash30372@GYC MINGW64 /e/tmp/gittest
$ git init
Initialized empty Git repository in E:/tmp/gittest/.git/
30372@GYC MINGW64 /e/tmp/gittest (master)
$ ls -a
./ ../ .git/
bashgit clone <url>
概念 | 描述 |
---|---|
工作区(Working Directory) | 你在电脑上看到的目录,包含了你的项目的所有文件和子目录。 |
暂存区(Stage/Index) | 一个临时存储区,用于存放你的改动,这些改动将在你执行git commit 命令时被提交到本地仓库。 |
本地仓库(Repository) | Git的核心部分,包含了你的项目的所有版本和历史记录。本地仓库的信息存储在.git 这个隐藏目录中。 |
远程仓库(Remote Repository) | 托管在远程服务器上的仓库,例如GitHub、GitLab、Gitee等。你可以将你的本地仓库同步到远程仓库,也可以从远程仓库获取更新。 |
状态 | 描述 |
---|---|
已修改(Modified) | 文件已经被修改,但还没有被添加到暂存区。 |
已暂存(Staged) | 文件已经被添加到暂存区,准备提交到本地仓库。 |
未跟踪(Untracked) | 文件还没有被Git跟踪,也没有被添加到暂存区。 |
已提交(Committed) | 文件已经被提交到本地仓库,此时文件的修改已经被永久保存下来。 |
bashgit init <project-name>
bashgit status
bash30372@GYC MINGW64 /e/tmp/gittest (main)
$ echo "这是第一个文件" > file1.txt
30372@GYC MINGW64 /e/tmp/gittest (main)
$ cat file1.txt
这是第一个文件
bash30372@GYC MINGW64 /e/tmp/gittest (main)
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
file1.txt
bash30372@GYC MINGW64 /e/tmp/gittest (main)
$ git add file1.txt
warning: in the working copy of 'file1.txt', LF will be replaced by CRLF the next time Git touches it
30372@GYC MINGW64 /e/tmp/gittest (main)
$ git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: file1.txt
```
- 将文件提交到本地仓库
```bash
git commit -m "message"
bash30372@GYC MINGW64 /e/tmp/gittest (main)
$ git commit -m "first commit"
[main (root-commit) 2e439a0] first commit
1 file changed, 1 insertion(+)
create mode 100644 file1.txt
30372@GYC MINGW64 /e/tmp/gittest (main)
$ git status
On branch main
nothing to commit, working tree clean
-m 参数为添加上传注释(不加的话会进入vim交互式界面)
bashgit log
bashgit log --oneline
--oneline表示简介模式
重置当前分支的HEAD为之前的某个提交, 并且删除所有之后的提交。
--hard参数表示重置工作区和暂存区,
--soft参数表示重置暂存区,
--mixed参数表示重置工作区 (默认)。
bashgit reflog
工作区
和暂存区
的差异命令 | 描述 |
---|---|
git diff | 比较工作区与暂存区的差异 |
git diff --staged | 比较暂存区与最新提交(HEAD)的差异 |
git diff <commit1> <commit2> | 比较两个提交之间的差异 |
git diff <file> | 比较指定文件的差异 |
git diff <branch1> <branch2> | 比较不同分支之间的差异 |
git diff --stat | 显示简略的差异信息 |
git diff <commit> <file> | 比较指定提交中的某个文件的差异 |
bashgit rm <file>
从工作区和暂存区删除一个文件, 并且将这次删除放入暂存区。
bashgit rm --cached <file>
从索引/暂存区中删除文件, 但是本地工作区文件还在, 只是不希望这个文件被版本控 制
.gitignore 文件用于告诉 Git 忽略哪些文件或目录,这些文件和目录将不会被 Git 跟踪和版本控制。
以下是一个简单的 .gitignore 文件示例:
bash# 忽略所有以 .a 结尾的文件
*.a
# 但是希望 track 某个 .a 文件,例如 lib.a
!lib.a
# 忽略所有的 .txt 文件
*.txt
# 仅仅忽略根目录下的 TODO.txt,不包括 subdir/TODO.txt
/TODO.txt
# 忽略 build/ 目录下的所有文件
build/
# 忽略 doc/ 目录下的所有 .pdf 文件
doc/*.pdf
以上是 .gitignore 文件的一些规则说明:
# 符号开头的行是注释,不会被 Git 解析。
* 表示通配符,比如 *.a 表示忽略所有以 .a 结尾的文件。
! 表示例外规则,用于确保某些特定文件被跟踪。
/ 开头的路径表示相对于仓库根目录的路径。
/ 结尾的路径表示忽略整个目录,包括其下的所有文件。
不带 / 的路径表示忽略相对于当前 .gitignore 文件所在目录的路径。
bashgit config --global user.name "your_name"
git config --global user.email "you@example.com"
ssh-keygen -t rsa -C "your_email@youremail.com" # 第一次创建一路回车
cat ~/.ssh/id_rsa.pub # 并复制粘贴到github上
ssh -T git@github.com # 测试
bashgit remote add origin <仓库名称>
2.更改本地默认分支名为 main:
bashgit branch -M main
bashgit push -u origin main
bashgit remotr -v
bashgit pull <远程仓库名> <远程分支名>:<本地分支名>
本文作者:GYC
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!