【Git基础】常用git命令(三)

1.版本回退

1.1 没有commit的情况

如果你还没有进行 commit,那么可以通过git checkout或者git restore命令来回退。

例如,如果你想撤销对 file1.txt 的更改,可以使用以下命令:

git checkout -- file1.txt

或者使用git restore命令:

git restore file1.txt

如果你想撤销对所有文件的更改,可以使用:

git checkout -- .

或者:

git restore .

1.2 已经commit但没有push的情况

如果你已经进行了 commit,但还没有 push,那么可以通过git resetgit revert命令来回退。

使用git reset命令回退到上一个 commit:

git reset HEAD~1

这将把 HEAD 指针移动到上一个 commit,并将更改放回到工作目录。你可以使用--soft--mixed--hard选项来指定回退方式。默认情况下,git reset使用--mixed模式。

使用git revert创建一个新的 commit,以撤销指定的 commit:

git revert HEAD

这将创建一个新的 commit,以撤销最近的 commit。你也可以使用 commit 的哈希值或者其他引用来指定要撤销的 commit。

1.3 已经push到远端仓库的情况

如果你已经进行了 push,那么回退的过程将涉及到远程仓库。首先,你需要使用git resetgit revert进行本地回退,然后再强制推送到远程仓库。

使用git reset回退到上一个 commit 并强制推送:

git reset HEAD~1
git push -f origin <branch_name>

使用git revert创建一个新的 commit,以撤销指定的 commit,并推送:

git revert HEAD
git push origin <branch_name>

需要注意的是,强制推送可能会导致其他人在远程仓库中丢失提交,所以在团队协作中要慎重使用。

2. 删除文件

2.1 从工作区删除文件

  • 首先,在工作区删除文件。例如,在命令行中,输入以下命令:
    rm 文件名.txt
    
    将“文件名.txt”替换为要删除的文件名。
  • 然后,将删除操作添加到暂存区(staging area):
    git add 文件名.txt
    
    同样,将“文件名.txt”替换为要删除的文件名。
  • 提交更改:
    git commit -m "删除了文件名.txt"
    
    将“删除了文件名.txt”替换为适当的提交信息。

2.2 使用git rm命令删除文件

  • 使用git rm命令删除文件。例如,输入以下命令:

    git rm 文件名.txt
    

    将“文件名.txt”替换为要删除的文件名。

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

  • 提交更改:

    git commit -m "删除了文件名.txt"
    

    将“删除了文件名.txt”替换为适当的提交信息。

在这两种方法中,使用git rm命令更简单,因为它直接从工作区和暂存区中删除文件,无需手动执行git add命令。注意,在删除文件后,确保提交更改,以便将更改更新到版本历史中。

2.3 永久删除文件

我们有的时候可能会不小心上传了一些无用的文件,尤其是我们使用C和C++的开发者,一不小心上传很多编译的中间文件,当然这个操作是可以通过.gitignore来避免的。但还是有的时候可能是上传了一个秘钥文件,这样关键的东西一般是很保密的,一般开发人员不应该能看到这样的秘钥文件。已经commit且push到远程仓库了,该怎么把它给删除呢?而且记录里也不应该存在,比如我们要永久删除secret.cert:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch secret.cert' --prune-empty --tag-name-filter cat -- --all

git push origin master --force

也可以删除文件夹,只需要将secret.cert替换成文件夹,在rm后添加-r参数在这里插入图片描述

2.4 永久删除文件的步骤拆解

  • 使用git log查找要删除文件的提交哈希(commit hash):

    git log --pretty=oneline -- 文件名.txt
    

    将“文件名.txt”替换为要删除的文件名。从输出中找到最早的提交哈希。

  • 使用git rebase命令交互式地删除该文件:

    git rebase -i 提交哈希^
    

    将“提交哈希”替换为步骤1中找到的哈希值。注意,后面要加上脱字符(^),表示哈希的前一个提交。

    这将打开一个文本编辑器,显示要编辑的提交列表。

  • 在文本编辑器中,找到要删除文件的那一行,将该行开头的pick更改为edit,然后保存并关闭文件。

  • 现在,你位于要删除文件的提交状态。从此提交中删除文件:

    git rm --cached 文件名.txt
    

    将“文件名.txt”替换为要删除的文件名。

  • 使用git commit --amend命令重新提交更改:

    git commit --amend
    

    这将重新提交该更改,并删除文件。

  • 使用git rebase --continue继续重写剩余的历史记录:

    git rebase --continue
    
  • 最后,将更改推送到远程仓库:

    git push --force
    

    注意,使用--force选项会覆盖远程仓库的历史记录。这可能会影响其他团队成员,因此在执行此操作之前,请确保与团队成员进行沟通。

经过上述步骤,文件将被永久删除,并且Git历史中不再包含有关该文件的记录。但是,这种操作具有一定风险,请谨慎操作。

3. 查看指定文件的修改

3.1 查看文件的所有commit

git log --oneline [filename]

显示文件的所有修改记录
在这里插入图片描述

3.2 查看所有commit的修改内容

git log -p [filename]

显示所有commit的修改
在这里插入图片描述

3.3 查看某个commit里的修改

git show [commit_id] [filename]

显示某个commit里文件的修改
在这里插入图片描述

3.4 查看本地修改的差异

git diff [filename]

查看本地对某个文件做了哪些具体的修改
在这里插入图片描述

3.5 与某个commit做比较

git diff [commit_id] [filename]

显示与某个commit间所有的差异,commit-id可以替换成HEAD,比如HEAD~2
在这里插入图片描述

3.6 两个commit之间的差异

git diff [commit_id1] [commit_id2]

显示两个commit所有差异
在这里插入图片描述

4. 多个客户端之间的同步

4.1 本地化方式

如果我们期望同事之间去互相pull和push代码,可以使用如下方式:

  1. 在每个参与者的电脑上,找到本地Git仓库的文件夹。在该文件夹中,执行以下命令,以启动一个Git服务:

    git daemon --reuseaddr --base-path=. --export-all --verbose
    

    这个命令将启动一个Git服务,允许其他参与者访问本地仓库。

  2. 获取每个参与者的IP地址,确保它们位于同一个局域网或VPN环境下。

  3. 在每个参与者的电脑上,将其他参与者的仓库添加为远程仓库。例如,假设同事A的IP地址是192.168.1.2,那么在同事B的电脑上,执行以下命令:

    git remote add colleagueA git://192.168.1.2/项目文件夹名称
    

    这将同事A的仓库添加为远程仓库。请根据实际情况替换IP地址和项目文件夹名称。

  4. 当需要从其他同事处获取代码更新时,使用以下命令:

    git fetch colleagueA 分支名称
    git merge colleagueA/分支名称
    

    这两个命令将从同事A的仓库获取更新,并合并到当前分支。请根据实际情况替换分支名称。

  5. 当需要将代码推送给其他同事时,首先确保对方已经将你的仓库添加为远程仓库。然后,使用以下命令:

    git push colleagueA 分支名称
    

    这个命令将把你的分支推送到同事A的仓库。请根据实际情况替换分支名称。

注意:这种方法需要每个参与者的电脑都运行Git服务,并且互相之间可以访问。如果出现网络问题,可能导致同步失败。而且这种方法没有中心化的服务器来管理版本历史,可能在协作过程中出现冲突。因此,推荐在实际应用中使用中心化的Git服务器来进行同步。

4.2 中心化方式

还通过一个中心化的Git服务器(如GitHub、GitLab等)作为中转站来实现。下面是一些基本步骤:

  1. 创建一个远程仓库:首先,你需要在一个Git服务器上创建一个远程仓库。这可以是GitHub、GitLab、Bitbucket等。创建远程仓库后,通常会得到一个URL,用于访问该仓库。

  2. 添加远程仓库:在本地仓库中,你需要将远程仓库添加为一个“远程”(remote)。在终端中输入以下命令:

    git remote add origin 远程仓库的URL
    

    这里的"origin"是远程仓库的别名,你可以根据需要更改。

  3. 推送本地仓库内容到远程仓库:使用以下命令将本地仓库的内容推送到远程仓库:

    git push -u origin master
    

    这会将本地的"master"分支推送到远程仓库的"master"分支。如果你使用的是其他分支,将"master"替换为相应的分支名。

  4. 其他客户端克隆远程仓库:在其他客户端上,你需要先克隆远程仓库。使用以下命令:

    git clone 远程仓库的URL
    

    这会将远程仓库克隆到本地,并自动设置"origin"远程。

  5. 拉取更新:当其他客户端对远程仓库进行了更改并推送后,你可以使用以下命令将最新更改拉取到本地:

    git pull origin master
    

    同样,如果使用的是其他分支,请将"master"替换为相应的分支名。

猜你喜欢

转载自blog.csdn.net/weixin_52665939/article/details/130277450