Linux:git

总结转自 Git 基本操作 | 菜鸟教程 (runoob.com)

说明:

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

目录

创建仓库、修改与提交缓存区

git init 命令

git clone 命令

git add 命令

git status 命令

git diff  命令

git commit  命令

设置提交代码时的用户信息 

提交修改

git reset 命令

git reset HEAD

git rm 命令

git mv 命令

远程仓库操作

git remote 命令

 git fetch 命令

git pull 命令

git push 命令


创建仓库、修改与提交缓存区

git init 命令

作用:初始化仓库

创建新的文件夹newtext,初始化为空的仓库

$ mkdir newtext
$ cd newtext/
$ git init
已初始化空的 Git 仓库于 /home/seer/Desktop/newtext/.git/

注:如果提示没有git,按照提示安装即可。sudo apt install git

在newtext里创建新的子仓库newrepo

$ git init newrepo
已初始化空的 Git 仓库于 /home/seer/Desktop/newtext/newrepo/.git/

git clone 命令

作用:克隆远程仓库到本地仓库

通过运行 git add 命令,你可以告诉 Git 哪些文件的修改应该包含在下一次提交(commit)中。

命令格式:

git clone [url]

[url]是你要拷贝的项目地址 

示例:

$ git clone https://github.com/Yan-Junzhi/Unitree-slam.git
正克隆到 'Unitree-slam'...
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 17 (delta 2), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (17/17), 完成.

这时在newtext文件下就会生成一个名为Unitree-slam的文件仓库。

!!但是如果碰到没有访问权限

参考 

[Git]-Linux下的git操作_linux git_Leviiil的博客-CSDN博客


git add 命令

作用:该文件添加到暂存区

添加一个或多个文件到暂存区:

git add [file1] [file2] ...

添加指定目录到暂存区,包括子目录:

git add [dir]

 添加当前目录下的所有文件到暂存区:

git add .

示例:

$ touch hello.php             # 创建文件
$ ls
comm.h  convert.h  hello.php  README.md
$ git status -s
?? hello.php
$ git add README.md hello.php

git status 命令用于查看项目的当前状态。

现在我们再执行 git status,就可以看到这两个文件已经加上去了。

$ git status -s
M  README.md
A  hello.php

现在修改README和hello文件,再执行git status查看。

出现M表示文件在我们将它添加到缓存之后又有改动。改动后我们再执行 git add . 命令将其添加到缓存中。(新项目中,添加所有文件很普遍,我们可以使用  git add . 命令来添加当前项目的所有文件。)

 文件修改后,我们一般都需要进行 git add 操作,从而保存历史版本。


git status 命令

作用:用于查看 Git 仓库当前状态的命令,可以查看在你上次提交之后是否有对文件进行再次修改。


git diff  命令

作用:比较文件的不同,即比较文件在暂存区和工作区的差异。

git diff 有两个主要的应用场景:

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff --stat

显示暂存区和工作区的差异:

$ git diff [file]

 显示暂存区和上一次提交(commit)的差异:

$ git diff --cached [file] 或 $ git diff --staged [file]

显示两次提交之间的差异: 

$ git diff [first-branch]...[second-branch]


git commit  命令

作用:将暂存区内容添加到本地仓库中。

提交暂存区到本地仓库中:

git commit -m [message]

 [message] 可以是一些备注信息。

提交暂存区的指定文件到仓库区:

$ git commit [file1] [file2] ... -m [message]

-a 参数设置修改文件后不需要执行 git add 命令,直接来提交

$ git commit -a

设置提交代码时的用户信息 

开始前我们需要先设置提交的用户信息,包括用户名和邮箱:

$ git config --global user.name 'runoob'

$ git config --global user.email test@runoob.com

如果去掉 --global 参数只对当前仓库有效。

提交修改

接下来我们就可以对 hello.php 的所有改动从暂存区内容添加到本地仓库中。

以下实例,我们使用 -m 选项以在命令行中提供提交注释。

$ git add hello.php
$ git status -s
M  README
A  hello.php
$ git commit -m '尝试提交'
[main 6ff62f5] 尝试提交
 2 files changed, 2 insertions(+)
 create mode 100644 hello.php

现在我们已经记录了快照。如果我们再执行 git status:

$ git status
位于分支 main
您的分支领先 'origin/main' 共 1 个提交。
  (使用 "git push" 来发布您的本地提交)

尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

	修改:     README.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。屏幕会像这样:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   hello.php
#
~
~
".git/COMMIT_EDITMSG" 9L, 257C

如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。命令格式如下:

git commit -a

我们先修改 hello.php 文件内容,再执行以下命令:

$ git commit -am '修改 hello.php 文件'
[main 02be450] 修改hello.php文件
 2 files changed, 2 insertions(+), 2 deletions(-)

git reset 命令

作用:用于回退版本,可以指定退回某一次提交的版本。

git reset 命令语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。

git reset [HEAD]

实例:

$ git reset HEAD^            # 回退所有内容到上一个版本 
$ git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本 
$ git reset 052e             # 回退到指定版本

--soft 参数用于回退到某个版本:

git reset --soft HEAD

实例:

$ git reset --soft HEAD~3   # 回退上上上一个版本 

--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:

git reset --hard HEAD

实例:

$ git reset --hard HEAD~3  # 回退上上上一个版本  
$ git reset –hard bae128  # 回退到某个版本回退点之前的所有信息。 
$ git reset --hard origin/master    # 将本地的状态回退到和远程的一样 

注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。

HEAD 说明:

  • HEAD 表示当前版本

  • HEAD^ 上一个版本

  • HEAD^^ 上上一个版本

  • HEAD^^^ 上上上一个版本

  • 以此类推...

可以使用 ~数字表示

  • HEAD~0 表示当前版本

  • HEAD~1 上一个版本

  • HEAD^2 上上一个版本

  • HEAD^3 上上上一个版本

  • 以此类推...


git reset HEAD

作用:用于取消已缓存的内容。

我们先改动文件 README 文件内容和hello.php 文件内容。

现在两个文件修改后,都提交到了缓存区,我们现在要取消其中一个的缓存,操作如下:

$ git status -s
    M README
    M hello.php
$ git add .
$ git status -s
M  README
M  hello.php
$ git reset HEAD hello.php 
Unstaged changes after reset:
M    hello.php
$ git status -s
M  README
    M hello.php

现在你执行 git commit,只会将 README 文件的改动提交,而 hello.php 是没有的。

$ git commit -m '修改'
[master f50cfda] 修改
    1 file changed, 1 insertion(+)
$ git status -s
    M hello.php

可以看到 hello.php 文件的修改并未提交。

这时我们可以使用以下命令将 hello.php 的修改提交:

$ git commit -am '修改 hello.php 文件'
[master 760f74d] 修改 hello.php 文件
    1 file changed, 1 insertion(+)
$ git status
On branch master
nothing to commit, working directory clean

简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。


git rm 命令

作用:用于删除文件

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。

git rm 删除文件有以下几种形式:

将文件从暂存区和工作区中删除:

git rm <file>

以下实例从暂存区和工作区中删除 hello.txt 文件:

git rm hello.txt

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。

强行从暂存区和工作区中删除修改后的 hello.txt 文件:

git rm -f hello.txt

如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:

git rm --cached <file>

以下实例从暂存区中删除 hello.txt 文件:

git rm --cached hello.txt

实例:

删除 hello.tet 文件:

$ git rm hello.txt
rm 'hello.txt'
$ ls
comm.h  convert.h  README.md

文件从暂存区域移除,但工作区保留:

$ git rm --cached README.md 
rm 'README.md'
$ ls
omm.h  convert.h  README.md

可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:

git rm –r * 

进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录。


git mv 命令

作用:用于移动或重命名一个文件、目录或软连接。

git mv [file] [newfile]

如果新文件名已经存在,但还是要重命名它,可以使用 -f 参数:

git mv -f [file] [newfile]

添加 README.md 文件(如果暂存区里没有的话):

$ git add README.md

对其重命名:

$ git mv README.md README
$ ls
comm.h  convert.h  README

远程仓库操作

git remote 命令

作用:用于用于管理 Git 仓库中的远程仓库。提供了一些用于查看、添加、重命名和删除远程仓库的功能。

以下是 git remote 命令的常见用法:

  • git remote:列出当前仓库中已配置的远程仓库。
  • git remote -v:列出当前仓库中已配置的远程仓库,并显示它们的 URL。
  • git remote add <remote_name> <remote_url>:添加一个新的远程仓库。指定一个远程仓库的名称和 URL,将其添加到当前仓库中。
  • git remote rename <old_name> <new_name>:将已配置的远程仓库重命名。
  • git remote remove <remote_name>:从当前仓库中删除指定的远程仓库。
  • git remote set-url <remote_name> <new_url>:修改指定远程仓库的 URL。
  • git remote show <remote_name>:显示指定远程仓库的详细信息,包括 URL 和跟踪分支。

以下列出了远程仓库、添加远程仓库、重命名远程仓库、删除远程仓库、修改远程仓库 URL 和查看远程仓库信息的用法:

git remote
git remote -v
git remote add origin https://github.com/user/repo.git
git remote rename origin new-origin
git remote remove new-origin
git remote set-url origin https://github.com/user/new-repo.git
git remote show origin

显示所有远程仓库:

以下我们先载入远程仓库,然后查看信息:

$ git clone https://github.com/tianqixin/runoob-git-test
$ cd runoob-git-test
$ git remote -v
origin  https://github.com/tianqixin/runoob-git-test (fetch)
origin  https://github.com/tianqixin/runoob-git-test (push)

origin 为远程地址的别名。

显示某个远程仓库的信息:

git remote show [remote]

例如:

$ git remote show https://github.com/tianqixin/runoob-git-test
* remote https://github.com/tianqixin/runoob-git-test
  Fetch URL: https://github.com/tianqixin/runoob-git-test
  Push  URL: https://github.com/tianqixin/runoob-git-test
  HEAD branch: master
  Local ref configured for 'git push':
    master pushes to master (local out of date)

添加远程版本库:

git remote add <remote_name> <remote_url>

  • <remote_name>:要添加的远程仓库的名称。通常,远程仓库的名称为 origin,但你也可以自定义一个名称。
  • <remote_url>:远程仓库的 URL。它可以是一个指向远程 Git 仓库的 HTTPS、SSH 或 Git 协议链接。

以下命令将向当前 Git 仓库添加一个名为 origin 的远程仓库,它的 URL 是 https://github.com/user/repo.git。

git remote add origin https://github.com/user/repo.git

实例用法:

# 提交到 Github
$ git remote add origin git@github.com:tianqixin/runoob-git-test.git
$ git push -u origin master

添加远程仓库后,你就可以使用其他 Git 命令与远程仓库进行交互,例如推送本地代码到远程仓库、拉取远程仓库的代码等。

其他相关命令:

git remote rm name # 删除远程仓库

git remote rename old_name new_name # 修改仓库名


 git fetch 命令

作用:用于从远程获取代码库。

该命令执行完后需要执行 git merge 远程分支到你所在的分支。

从远端仓库提取数据并尝试合并到当前分支:

git merge

该命令就是在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支。

假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行:

git fetch [alias]

以上命令告诉 Git 去获取它有你没有的数据,然后你可以执行:

git merge [alias]/[branch]

以上命令将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。

我们可以使用以下命令将更新同步到本地:

$ git merge origin/master

git pull 命令

作用:用于从远程获取代码并合并本地的版本。

git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。

命令格式如下:

git pull <远程主机名> <远程分支名>:<本地分支名>

实例

更新操作:

$ git pull
$ git pull origin

将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。

git pull origin master:brantest

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

git pull origin master

上面命令表示,取回 origin/master 分支,再与本地的 brantest 分支合并。

上面的 pull 操作用 fetch 表示为:

$ git remote -v  # 查看信息
$ git pull origin master
From https://github.com/tianqixin/runoob-git-test
 * branch            master     -> FETCH_HEAD
Already up to date.

上面命令表示,取回 origin/master 分支,再与本地的 master 分支合并。


git push 命令

作用:用于从将本地的分支版本上传到远程并合并。

命令格式如下:

git push <远程主机名> <本地分支名>:<远程分支名>

如果本地分支名与远程分支名相同,则可以省略冒号:

git push <远程主机名> <本地分支名>

实例

以下命令将本地的 master 分支推送到 origin 主机的 master 分支。

$ git push origin master

相等于:

$ git push origin master:master

如果本地版本与远程版本有差异,但又要强制推送可以使用 --force 参数:

git push --force origin master

删除主机的分支可以使用 --delete 参数,以下命令表示删除 origin 主机的 master 分支:

git push origin --delete master

以我的 https://github.com/tianqixin/runoob-git-test 为例,本地添加文件:

$ touch runoob-test.txt      # 添加文件
$ git add runoob-test.txt 
$ git commit -m "添加到远程"
master 69e702d] 添加到远程
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 runoob-test.txt

$ git push origin master    # 推送到 Github

将本地的 master 分支推送到 origin 主机的 master 分支。

重新回到我们的 Github 仓库,可以看到文件已经提交上来了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值