0%

Git的Q_A

自动摘要: 仓库管理 建立本地仓库 使用Git前,需要先建立一个仓库(repository)。您可以使用一个已经存在的目录作为Git仓库或创建一个空目录。 ```bash 在当前目录初 ……..

仓库管理

建立本地仓库

使用Git前,需要先建立一个仓库(repository)。您可以使用一个已经存在的目录作为Git仓库或创建一个空目录。

1
2
3
4
5
6
7
8
# 在当前目录初始化一个Git仓库
git init

# 新建一个目录,将其初始化为Git仓库
# 格式
git init [project-name]
# 示例
git init newrepo

从现在开始,我们将假设您在Git仓库根目录下,除非另有说明。

克隆远程仓库

如果希望在当前目录下与网络上存在的仓库同步,可以直接从网络上将仓库克隆下来。并且未来可以直接与网络仓库同步(必须具有权限)。

1
2
3
4
5
6
# 下载一个项目和它的整个代码历史
# 格式
git [url]
# 示例
git clone http://example.com/www/project.git
git clone ssh://example.com/~/www/project.git

新建远程仓库链接

1
2
3
4
# 增加一个新的远程仓库,并命名
git remote add [shortname] [url]
# 示例
git remote add remote-project ssh://example.com/~/www/project.git

查询远程仓库信息

1
2
3
4
5
6
7
8
# 显示所有远程仓库
git remote -v

# 显示某个远程仓库的信息
# 格式
git remote show [remote]
# 示例
git remote show origin

更新远程仓库

修改之后推送到服务器。

1
2
3
4
5
6
7
8
9
10
11
12
# 上传本地指定分支到远程仓库
# 格式
git push [remote] [branch]
# 示例:上传本地当前分支到指定远程仓库
git push http://example.com/www/project.git
git push ssh://example.com/~/www/project.git

# 强行推送当前分支到远程仓库,即使有冲突
git push [remote] --force

# 推送所有分支到远程仓库
git push [remote] --all

更新本地仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
# 下载远程仓库的所有变动
# 格式
git fetch [remote]
# 示例
git fetch origin

# 取回远程仓库的变化,并与本地分支合并
# 格式
git pull [remote] [branch]
# 示例:使用默认的远程连接,与当前分支合并
git pull
# 示例:使用指定的远程连接,与当前分支合并
git pull http://git.example.com/project.git

配置管理

显示配置信息

1
git config --list

编辑配置文件

1
2
3
4
5
6
# 格式
git config -e [--global]
# 当前仓库的局部配置文件
git config -e
# 所有仓库的全局配置文件
git config -e --global

增加用户名和Email

1
# 配置当前仓库用户名称git config user.name "[name]"# 配置当前仓库用户 emailgit config user.email "[email address]"# 配置全局仓库用户名称git config [--global ] user.name "[name]"# 配置全局仓库用户 emailgit config [--global ] user.email "[email address]"

文件操作

添加新文件到仓库

1
# 添加指定文件到暂存区# 格式git add [file1] [file2]# 示例git add README.md main.py# 添加指定目录到暂存区,包括子目录# 格式git add [dir]# 示例git add documents# 添加当前目录的所有文件到暂存区git add .

如果文件发生改变,可以再次使用git add [filename] 继续添加任务文件。

删除仓库里的文件

1
# 删除工作区文件,并且将这次删除放入暂存区# 格式git rm [file1] [file2]# 示例git rm README.md main.py# 停止追踪指定文件,但该文件会保留在工作区# 格式git rm --cached [file]# 示例git rm --cached README.mds

修改仓库里的文件名称

1
# 改名文件,并且将这个改名放入暂存区# 格式git mv [file-original] [file-renamed]# 示例git mv README.md README.MDgit mv main.py src/main.py

将文件提交到仓库中

现在我们已经添加了这些文件,我们希望它们能够真正被保存在Git仓库。

为此,我们将它们提交到仓库。

1
# 提交暂存区到仓库区# 格式git commit -m [message]# 示例git commit -m "Adding files"

如果需要使用编辑器来编写注释信息,可以直接不加参数。

1
git commit

当我们修改了很多文件,而不想每一个都git add,想git commit自动来提交本地修改,我们可以使用-a标识。

1
git commit -a -m "Changed some files"

git commit 命令的-a选项可将所有发生变化并且已经被 Git 管理的文档提交到仓库中。

千万注意,-a不会造成新文件被提交,只能是已经被 Git 管理的文档。

分支管理

查询已有分支

1
# 列出所有本地分支git branch# 列出所有远程分支git branch -r# 列出所有本地分支和远程分支git branch -a

创建新的分支

1
# 新建一个分支,但依然停留在当前分支# 格式git branch [branch-name]# 示例git branch newBranch# 新建一个分支,并切换到该分支# 格式git checkout -b [branch-name]# 示例git checckout -b newBranch

切换当前的分支

1
# 切换到指定分支,并且更新工作区# 格式git checkout [branch-name]# 示例git checkout master

第一个分支,或主分支,被称为”master”。

合并不同分支

对其他分支的更改不会反映在主分支上。如果想将更改提交到主分支,则需切换回master分支,然后使用合并。

1
# 合并指定分支到当前分支# 格式git merge [branch]# 示例git checkout mastergit merge test# 选择一个commit,合并进当前分支git cherry-pick [commit-id]

删除不需要的分支

1
# 删除分支# 格式git branch -d [branch-name]# 示例git branch -d newBranch# 删除远程分支# 格式git push origin --delete [branch-name]git branch -dr [remote/branch]# 示例git push origin --delete newBranchgit branch -dr [remote/newBranch]

标签管理

当新版本上线时,会建立版本标签。Git 的标签是项目里程碑和历史状态关键点的标识,可以根据项目标签来查看历史某一版本的代码,也可以根据项目标签来回滚代码。

查询历史标签

1
# 列出所有标签git tag

创建本地标签

1
# 新建一个tag在当前commit# 格式git tag [tag]# 示例git tag "v1.0"# 新建一个tag在指定commit# 格式git tag [tag] [commit]# 示例git tag "v0.9" 1df80681f3b8504378bf70a27ca6567b98eec2e5

删除标签

1
# 删除本地tag# 格式git tag -d [tag]# 示例git tag -d "v1.0"# 删除远程tag# 格式git push origin :refs/tags/[tagName]# 示例git push origin :refs/tags/"v1.0"

查看标签对应的日志信息

1
# 查看tag信息# 格式git show [tag]# 示例git show "v1.0"

信息管理

查询文件信息

1
# 显示有变更的文件git status

查询日志信息

1
# 显示当前分支的版本历史git log# 显示commit历史,以及每次commit发生变更的文件git log --stat# 显示所有提交过的用户,按提交次数排序git shortlog -sn# 显示指定文件是什么人在什么时间修改过git blame [file]

状态回滚

工作区回滚

1
# 恢复暂存区的指定文件到工作区# 格式git checkout [file]# 示例git checkout README.md# 恢复某个commit的指定文件到暂存区和工作区# 格式git checkout [commit] [file]# 示例git checkout af592268edd32ce756db5eb128f6904a21504e4d README.md# 恢复暂存区的所有文件到工作区git checkout .

暂存区回滚

1
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变# 格式git reset [file]# 示例git reset README.md# 重置暂存区与工作区,与上一次commit保持一致git reset --hard# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变# 格式git reset [commit]# 示例git reset af592268edd32ce756db5eb128f6904a21504e4d# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致# 格式git reset --hard [commit]# 示例git reset --hard af592268edd32ce756db5eb128f6904a21504e4d# 重置当前HEAD为指定commit,但保持暂存区和工作区不变# 格式git reset --keep [commit]# 示例git reset --keep af592268edd32ce756db5eb128f6904a21504e4d

提交回滚

1
# 新建一个commit,用来撤销指定commit# 后者的所有变化都将被前者抵消,并且应用到当前分支# 格式git revert [commit]# 示例git revert af592268edd32ce756db5eb128f6904a21504e4d
  • 本文作者: SindreYang
  • 本文链接: http://blog.mviai.com/2025/Git的Q_A/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道