git基本操作

本文详细介绍了Git的基本操作,包括gitinit创建库,gitadd和gitcommit的使用来管理文件,gitreset的三种模式在版本库、暂存区和工作区之间的操作,以及gitclone、gitstatus、gitdiff查看文件差异。此外,还讲解了gitbranch的分支管理,gitpull和gitfetch的远程仓库交互,以及gitmerge时如何处理合并冲突。最后,提到了gitdiff在不同阶段比较文件的用法。

git init 创建库

1.git add 工作区--暂存区

例:git add a.txt     /  git add . (将所有工作区文件添加到暂存区)

2.git commit 暂存区--版本库

例:git commit a.txt -m "提交说明"    / git commit -am ""(将所有暂存区文件提交到版本库)

3.git reset --mixed 版本库--暂存区

例:git reset --mixed d5d43ff(git reset --mixed 版本号,是指把该版本号提交的内容从版本区位置回滚到暂存区。)

4.4 暂存区 => 工作区 —— git reset --soft

  git reset命令--soft跟着版本号,是指把该版本号提交的内容从暂存区位置回滚到工作区。

git reset --soft 版本

4.5 版本区 => 暂存区 => 工作区 —— git reset --hard

  git reset命令--hard跟着版本号,是指把该版本号提交的内容从版本区位置回滚到工作区。

git reset --hard 版本号

4.6  git checkout +文件名  /  .    工作区文件的还原

1.git clone 工程克隆

2.git status 查看状态

3.git diff 查看修改内容

git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。

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

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 显示暂存区和工作区的差异:

    $ git diff [file]

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

    $ git diff --cached [file]

git branch(列出分支),git branch 分支名/git checkout -b 分支名(新建分支),git branch -d 分支名(删除分支),git checkout 分支名(切换分支)

git pull 命令

git pull 命令用于从远程获取代码并合并本地的版本。

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

命令格式如下:

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

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

git pull origin master:brantest

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

git pull origin master

git fetch 命令:

$ git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
  • 1

如果只想取回特定分支的更新,可以指定分支名:

$ git fetch <远程主机名> <分支名> //注意之间有空格
  • 1

最常见的命令如取回origin 主机的master 分支:

$ git fetch origin master
  • 1

取回更新后,会返回一个FETCH_HEAD ,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:

$ git log -p FETCH_HEAD

git merge

虽然目标分支的提交历史相对于当前分支是线性的,可以进行快进合并,但你仍然希望有一个合并commit来标志合并在此commit发生过,那么可以在执行git merge命令时使用--no-ff选项。

git merge --no-ff <branch>

果将要合并的两个分支都修改了同一个而文件的同一个部分内容,Git就无法确定应该使用哪个版本的内容。当这种情况发生时,合并过程会停止在合并commit提交之前,以便给用户留下机会手动修复这些冲突。

在Git的合并过程中,很棒的一点是它使用人们熟知的 编辑 / 暂存 / 提交 这样的工作流程来解决冲突。当碰到合并冲突时,执行git status命令会列出哪些文件含有冲突并需要手动解决。比如说当两个分支都修改了hello.py文件的同一部分,你会看到类似下面这样的信息:

On branch main
Unmerged paths:
(use "git add/rm ..." as appropriate to mark resolution)
both modified: hello.py

冲突是如何显示的

当Git在合并过程中碰到了冲突,它会编辑受影响的文件中的相关内容,并添加视觉标记用以展示冲突中双方在此部分的不同内容。这些视觉标记为:<<<<<<<,=======,>>>>>>>。要找到冲突发生的具体位置,在文件中搜索这些视觉标记会非常便捷地达成目的。

here is some content not affected by the conflict
<<<<<<< main
this is conflicted text from main
=======
this is conflicted text from feature branch
>>>>>>> feature branch;

通常来说在 ====== 标记之前的内容来自于接收合并的分支,而在这之后的内容来自于要合并的分支。

一旦找到冲突的部分,就可以根据需要来修正冲突。当你完成了冲突的修复并准备好继续进行合并,只需要执行git add命令把已经解决好冲突的文件添加暂存区,告诉Git这些冲突已经解决完毕即可。这之后就像正常提交代码一样执行git commit完成合并commit。这个过程跟正常情况下提交代码是完全一样的,也就是说对于普通开发者来说处理冲突也是小菜一碟。

较修改之间的差异

git diff不加参数即默认比较工作区与暂存区
git diff --cached [<path>...]比较暂存区与最新本地版本库(本地库中最近一次commit的内容)
git diff HEAD [<path>...]比较工作区与最新本地版本库。如果HEAD指向的是master分支,那么HEAD还可以换成master
git diff commit-id [<path>...]比较工作区与指定commit-id的差异      
git diff --cached [<commit-id>] [<path>...]比较暂存区与指定commit-id的差异
git diff [<commit-id>] [<commit-id>]比较两个commit-id之间的差异
例如,比较工作区和暂存区的main.cpp文件的差异。

$ git diff main.cpp
diff --git a/main.cpp b/main.cpp
index 57a5778..24604db 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,6 +1,7 @@
 #include <iostream>
 using namespace std;
 int main(){
-    cout<<"Hello, World!"<<flush;
+       int a, b;
+    cout<<"Hello, World!"<<endl;
     return 0;
 }
\ No newline at end of file
————————————————
版权声明:本文为CSDN博主「ezhchai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ezhchai/article/details/79387452

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值