Git 常用命令
Git 常用命令
简介
Git 是一个命令行实用程序的集合,它会跟踪和记录文件中的更改,具体的操作都可以通过 Git 命令实现。
基于 Git 的远程仓库
远程仓库 | 地址 | 备注 |
---|---|---|
GitHub | https://github.com/ | 世界上最主流的远程开源仓库。 |
Gitee | https://gitee.com/ | 国内目前比较主流的开源仓库,也可以私有化部署。 (推荐) |
GitLab | https://gitlab.com/ | 私有化部署,企业使用较多。 |
Git 远程仓库的应用场景
- 获取远程仓库代码:开源代码、项目代码。
- 项目协作:维护自己的代码、多人维护同一项目。
Git 同步命令
克隆远程仓库
- 命令:
git clone <url>
远程连接方式 | 特点 |
---|---|
HTTPS 连接 | 使用给定 URL 即可 clone,在 push 时验证用户名和密码。 |
SSH 连接 | 需要提前添加 SSH Key,在 push 时不需要输入用户名,配置 SSH 时设置了密码才需要输入密码。 |
HTTPS 连接
为了方便使用,一般可以先设置下全局的账号。
配置的方式也很简单,用这两条命令就可以。
- 配置全局帐号:
- 配置用户名:
git config --global user.name "your name"
- 配置邮箱:
git config --global user.email "your_email@youremail.com"
- 配置用户名:
大家需要注意,配置的时候,yourname
要替换成远程仓库 用户名,your_email@youremail.com
需要替换成你注册远程仓库的邮箱。
配置好之后,可以通过 git config --global --list
命令去查看配置的是否正确。
使用 HTTPS 方式克隆仓库:git clone https://gitlab.stuq.ceshiren.com/vipstudent/pythonprogramming.git
SSH 连接
如果需要使用 ssh 的方式,就需要先去生成 SSH Key,并且配置到远程仓库的设置中。
生成方法很简单,只需要一条命令。
ssh-keygen -t rsa -C "your_email@youremail.com"
大家要注意这里的 "your_email@youremail.com" 要换成远程仓库的注册邮箱,然后连敲三次回车键,不要做任何配置,执行后 log 中有生成密钥的存放位置。
后面就需要把这个目录下生成的公钥,也就是 id_rsa.pub 文件中的内容拷贝出来配置到远程仓库中。
使用 SSH 方式克隆仓库:git clone git@gitlab.stuq.ceshiren.com:vipstudent/pythonprogramming.git
拉取远程仓库
如果远程仓库的内容有更新,可以通过 git pull
命令把远程仓库的内容同步到本地来。
localhost@ git_demo % git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From gitee.com:xxxx/git_demo
3c18462..9e58263 master -> origin/master
Updating 3c18462..9e58263
Fast-forward
README.md | 2 ++
1 file changed, 2 insertions(+)
初始化仓库
也可以先在本地的目录中初始化一个空的仓库。然后通过 git remote 命名
,来关联到远程仓库。
一般情况下,当从远程仓库中克隆下一个项目来之后。默认的远程仓库名是 origin。
这里因为是先创建的本地仓库,所以可以通过 git remote add
命令,手动给远程仓库起名为 origin,后面和远程仓库同步的时候,就可以直接使用 origin 来指代对应建立连接的远程仓库了。
784f439064aa@ git_demo % git init
Initialized empty Git repository in /Users/mac/git_demo/.git/
localhost@ git_demo % git remote add origin git@gitee.com:feier-hogwarts/git_demo.git
localhost@ git_demo % git pull --allow-unrelated-histories origin master
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 17 (delta 3), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (17/17), done.
From gitee.com:feier-hogwarts/git_demo
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
这里有一点大家要注意,使用 git remote add
添加完远程仓库之后,因为这时候本地的版本和 origin 远程仓库的版本是不一致的,需要从远程仓库上获取最新的代码。也就是说在执行 push
之前需要先从远程仓库上拉取最新的内容。
这里需要使用的命令是:git pull --allow-unrelated-histories origin master
localhost@ git_demo % git pull --allow-unrelated-histories origin master
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 17 (delta 3), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (17/17), done.
From gitee.com:feier-hogwarts/git_demo
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
localhost@ git_demo % vim 1
localhost@ git_demo % git add .
localhost@ git_demo % git commit -m "修改文件1内容"
[master 8b4c103] 修改文件1内容
1 file changed, 1 insertion(+)
localhost@ git_demo % git push --set-upstream origin master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 338 bytes | 338.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:feier-hogwarts/git_demo.git
4e077cd..8b4c103 master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
这样,远程仓库的内容就同步过来了。
注意,同步远程仓库,选择 git clone
或者 git remote
中的一种方式就可以。
Git 修改命令
现在已经有了本地仓库和对应的远程仓库。下面就可以开始日常的工作了。
如果在本地对仓库中文件内容做了修改,怎么才能提交到仓库中呢?
这个时候就需要使用到 Git 的修改命令了。
跟踪新文件
根据 Git 的工作流程,首先需要先把修改后的文件添加到暂存区,这里需要用到的是 git add <file>/<directory>
命令,后面可以加文件名或者目录名。
最常用的,可以使用 git add .
把当前目录中所有的修改都添加到暂存区。
# 跟踪某个文件
784f439064aa@ git_demo % git add new_file.txt
# 跟踪当前目录下所有文件
784f439064aa@ git_demo % git add .
提交更新
然后需要先把暂存区的文件提交到本地仓库中。这里就需要使用 git commit
命令。
- 提交到本地仓库:
git commit -m "comments"
- 已修改文件跳过使用暂存区域:
git commit -a -m "comments"
784f439064aa@ git_demo % git commit -m "first upload"
[master (root-commit) 9868463] first upload
1 file changed, 3 insertions(+)
create mode 100644 readme.txt
784f439064aa@ git_demo % git commit -a -m "跳过使用暂存区"
[master 2fee19e] 跳过使用暂存区
1 file changed, 2 insertions(+)
推送到远程仓库
添加到本地仓库后,如果有需要,还可以把本地仓库的内容同步到远程仓库中。
- 推送本地仓库到远程仓库:
git push
localhost@ git_demo % git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 325 bytes | 325.00 KiB/s, done.
Total 3 (delta 1), reused 2 (delta 1)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:feier-hogwarts/git_demo.git
a1cbb3a..3c18462 master -> master
通过这几个简单的命令,就能在本地完成工作,然后完成本地仓库与远程仓库之间的同步了。
Git 常用调试命令
在实际场景中遇到问题了应该怎么处理呢?这时候就需要用到 Git 的一些调试命令了。
检查当前文件状态
在 Git 仓库中,想要查看目前仓库中文件的状态。就可以使用 git status
命令。
它可以显示版本库和暂存区的状态,允许我们看到被追踪的、未被追踪的文件和变化。这个命令不会显示任何提交记录或信息。
784f439064aa@ git_demo % git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: readme.txt
查看已暂存和未暂存的修改
当想要了解未暂存和已暂存之间的区别,可以使用 git diff
命令。它可以显示提交、提交和工作树之间的变化等。
- 比较当前文件和暂存区域快照之间的差异:
git diff
- 查看已暂存的将要添加到下次提交里的内容:
git diff --staged
784f439064aa@ git_demo % git diff
diff --git a/readme.txt b/readme.txt
index f971b3a..bfa1ab8 100644
--- a/readme.txt
+++ b/readme.txt
@@ -3,3 +3,5 @@
update1
update2
+
+update3
784f439064aa@ git_demo % git diff --staged
diff --git a/new_file.txt b/new_file.txt
new file mode 100644
index 0000000..c855c19
--- /dev/null
+++ b/new_file.txt
@@ -0,0 +1 @@
+987655
撤销操作
如果发现自己刚才的修改有错误,可以使用 git checkout
命令还还原到上一次提交之前的内容。
- 撤销对文件的修改:
git checkout <file>
- 取消暂存:
git reset HEAD <file>
784f439064aa@ git_demo % cat readme.txt
1234
update1
update2
update3
784f439064aa@ git_demo % git checkout readme.txt
784f439064aa@ git_demo % cat readme.txt
1234
update1
update2
784f439064aa@ git_demo % git reset HEAD file.txt
784f439064aa@ git_demo % git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
file.txt
nothing added to commit but untracked files present (use "git add" to track)
移除文件
如果想从版本库中删除该文件。可以通过 git rm
命令来完成。
上述命令将从 Git 和仓库中删除该文件。git rm
命令不仅将文件从仓库中删除,也将从暂存区中删除。如果检查仓库的状态,那么它将显示为已删除。
有时想要从 Git 上删除文件,但又想把文件保留在本地仓库。换句话说,你不想在 Git 上分享文件。Git 允许这样做。在这种情况下,可以使用缓存选项。它指定删除操作只作用于暂存索引,而不是仓库。
- 删除文件:
git rm -f <file>
- 移出暂存区:
git rm --cached <file>
784f439064aa@ git_demo % git rm -f file.txt
rm 'file.txt'
784f439064aa@ git_demo % git rm --cached file.txt
rm 'file.txt'
忽略文件
忽略的文件是指这种被 git 明确忽略的文件。必须告诉 git 忽略这些文件。一般来说,被忽略的文件是人工制品和机器生成的文件。这些文件可以来自你的版本库源,或者不应该被提交。
忽略文件的规则是在 .gitignore
文件中定义的。.gitignore
文件是一个包含所有被忽略文件的格式和文件的文件。可以在一个不同的目录下创建多个忽略文件。如果目录中没有一个名为 .gitignore
的文件,那么就创建一个。
然后将想忽略的文件和目录添加到 .gitignore
文件中。
总结
- 基于 Git 的远程仓库
- Git 同步命令
- Git 修改命令
- Git 常用调试命令