Git学习笔记

1. 本地管理

1.1 初始化

git init
git add -A
git commit -m "First"

查看哪些文件发生变动

git status

1.2 查看修改

修改之后,add之前查看修改之处:

git diff readme.txt

输出:a/为已提交的版本, b/为当前修改尚未提交的版本

diff --git a/readme.md b/readme.md
index ed89f3d..958ad65 100644
--- a/readme.md
+++ b/readme.md
@@ -4,3 +4,6 @@
 
 
 fffffff
+
+
+ddddddddddd

注:git diff查看全部修改

1.3 撤销更改

git checkout -- readme.md

注:

  1. 务必添加--
  2. 若是在git add之前的修改,该命令回退到修改之前,也就是最近一次commit的样子
  3. 若是在git add之后的修改,该命令回退最近一次add的样子

1.4 版本回退

  1. 查看提交记录

    git log
    

    输出当前分支

    commit 82e043b615d12814acc0d96f9782ed7712e785f1 (HEAD -> master)
    Author: wh <wh@wh.com>
    Date:   Wed Mar 15 19:19:47 2023 -0700
    
        second
    
    commit 89fbcaf3803cc3b0c5bf7d23d17312c67ae79d0d
    Author: wh <wh@wh.com>
    Date:   Wed Mar 15 19:15:41 2023 -0700
    
        First
    
  2. 回退到某个分支

    git reset --hard 89fbcaf3803cc3b0c5bf7d23d17312c67ae79d0d
    
  3. 查看历史提交/回退记录

    git reflog
    

    可根据编号使用reset回退

2. 远程相关

2.1 提交远程仓库 & 下载

  1. 添加远程仓库

    git remote add origin git@github.com:a171232886/test.git
    

    origin表示远程仓库(通常默认名为origin),后面是远程仓库的地址

  2. 提交

    git branch -M main   	# 第一次提交时使用,把当前分支名改为main
    git push -u origin main # 把本地的当前main,提交到远程库origin
    
  3. 从远程下载最新版本(主分支)

    git clone git@github.com:a171232886/test.git
    
  4. 从远程下载名为dev1的分支

```bash
git clone git@github.com:a171232886/test.git -d dev1
```

2.2 删除本地记录的远程库

  1. 查看

    git remote -v
    

    输出

    origin	git@github.com:a171232886/test.git (fetch)
    origin	git@github.com:a171232886/test.git (push)
    
  2. 删除

    git remote rm origin
    

2.3 创建分支

  1. 创建一个名为dev的分支

    git branch dev
    
  2. 切换到dev分支

    git checkout dev # git switch dev 也可
    

    注:

    • 创建并切换可用git checkout -b dev

    • 此时执行git push -u origin dev会在将dev推送到远程仓库的dev分支(若没有则创建)

  3. 删除分支

    git branch -d dev
    
  4. 合并dev分支到当前分支

    git merge dev
    

    注:在对源代码进行增、删、改,通常均可自动合并。若出现以下对话,通常按ctrl + x

    GNU nano 4.8    /home/wh/Desktop/test/cpp_sketch/.git/MERGE_MSG               
    Merge branch 'dev3' into main
    # Please enter a commit message to explain why this merge is necessary,
    # especially if it merges an updated upstream into a topic branch.
    #
    # Lines starting with '#' will be ignored, and an empty message aborts
    # the commit.
    
    
    
    
    
    [ Read 6 lines ]
    ^G Get Help  ^O Write Out ^W Where Is  ^K Cut Text  ^J Justify   ^C Cur Pos
    ^X Exit      ^R Read File ^\ Replace   ^U Paste Text^T To Spell  ^_ Go To Line
    

    ctrl + x,输出以下内容表示合并完成

    Merge made by the 'recursive' strategy.
     _auto/main.cpp | 10 ++++++----
     1 file changed, 6 insertions(+), 4 deletions(-)
    

2.4 分支冲突管理

2.4.1 冲突产生原因分析

主分支之外有两个开发分支(通常是针对不同模块进行修改)。两个开发分支都是基于main0生成。

  • Dev1修改完成,合并到main0时,冲突内容可自动合并
  • Dev2修改完成,,合并到main1时,冲突需要手动调整
    • 因为Dev2是基于main0生成,而此时主分支已经到了main1
      请添加图片描述
image-20230320143929704
2.4.2 冲突解决
  1. git merge dev2出现冲突

    Auto-merging readme.md
    CONFLICT (content): Merge conflict in readme.md
    Automatic merge failed; fix conflicts and then commit the result.
    
  2. git status查看当前状态

    On branch main
    Your branch is up to date with 'origin/main'.
    
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Changes to be committed:
    	modified:   _lambda/basic.cpp
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
    	both modified:   readme.md
    

    发现需要手动处理的文件是readme.md

  3. 修改文件

# C++见闻录

main 15:47
<<<<<<< HEAD
dev1 15:55
=======
dev2 15:56
>>>>>>> dev2

注:<<<<<<< 表示冲突部分main分支的当前内容,>>>>>>>表示冲突部分dev2分支的当前内容

  1. 修改好后,commit即可

    git commit -m "fix"
    
2.4.3 基于vscode的冲突解决
  1. 定位文件开始修改
    请添加图片描述

  2. 根据提示选择使用哪份内容,最后选择合并
    请添加图片描述

3. 多人协作典型流程

  1. 在主分支上创建自己的分支,假设名为dev_my,并下载

    git clone git@github.com:a171232886/test.git -d dev_my
    
  2. dev_my上进行修改,完成后commit提交

    git add -A
    git commit -m "xxxx"
    
  3. 在push之前,先执行pull提前解决冲突

    git push origin main
    

    可能的输出

    From github.com:a171232886/test
     * branch            main       -> FETCH_HEAD
    Auto-merging readme.md
    CONFLICT (content): Merge conflict in readme.md
    Auto-merging _auto/main.cpp
    CONFLICT (content): Merge conflict in _auto/main.cpp
    Automatic merge failed; fix conflicts and then commit the result.
    

    当远程的main分支发生变化时,dev_my之后merge到main必须手动解决冲突。pull的作用是从一个仓库或者本地的分支拉取并且整合代码,也就是提前解决这些冲突,并保证当前分支所依照的main为最新版本。

  4. push到dev_my

    git push origin dev_my
    

参看

  1. https://www.liaoxuefeng.com/wiki/896043488029600
  2. https://zhuanlan.zhihu.com/p/324219299
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值