前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >git入门

git入门

作者头像
你的益达
发布2020-11-23 10:41:54
3870
发布2020-11-23 10:41:54
举报
文章被收录于专栏:阿伟的个人博客

git结构

本地结构

本地结构包括工作区、暂存区以及本地库。

工作区用于存储当前写的这些代码,暂存区存储将要提交上去的代码暂存区的代码还是可以撤回的,本地库存储的是每个历史版本的信息。

将工作区代码提交到暂存区

代码语言:javascript
复制
git add

将暂存区的代码提交到本地库

代码语言:javascript
复制
git commit
代码托管中心

其作用为帮助我们维护远程库

团队内部协作

1)项目经理现在自己的本地库中创建项目

2)项目经理将本地库中的代码push到远程库中

3)开发人员可以从远程库中将代码clone到自己的本地库

4)开发人员写完后需要加入该团队才可以将代码push 到远程库中

5)之后项目经理就可以从远程库中将程序员提交的内容pull下来

团队间协作

创建者公司拥有一个远程库,协助者亦拥有一个远程库,协助开发的公司的远程库想要在创建者公司基础上开发需要进行fork操作获得其完整的代码,当其完成需求想要同步到创建者的远程库时,其会先发起拉取请求,然后创建者进行审核,没问题时采用merge操作将内容合并到自己的远程库中。

git操作

初始化本地仓库

设置签名:设置用户名与邮箱

代码语言:javascript
复制
wg@DESKTOP-AQLVI3K MINGW64 /e
$ git config --global user.name "wg"

wg@DESKTOP-AQLVI3K MINGW64 /e
$ git config --global user.email "gw_9527@163.com"

仓库初始化

代码语言:javascript
复制
wg@DESKTOP-AQLVI3K MINGW64 /e/GitResp
$ git init
Initialized empty Git repository in E:/GitResp/.git/
add和commit命令

git只能管理暂存区和本地库中的文件。

首先在工作区中创建Demo.md的文件,然后使用git add将文件推到暂存区。

代码语言:javascript
复制
wg@DESKTOP-AQLVI3K MINGW64 /e/GitResp (master)
$ git add Demo.md

再将暂存区的文件提交到本地库。

代码语言:javascript
复制
$ git commit -m "这是我写的第一个文件 Demo.md" Demo.md
[master (root-commit) 6df164a] 杩欐槸鎴戝啓鐨勭涓€涓枃浠?Demo.md
 1 file changed, 1 insertion(+)
 create mode 100644 Demo.md

-m 用于给当前的提交加注释。

status命令

查看工作区

对于提交本地库之后,修改文件的数据后,执行git status就会出现git已经发现你修改了文件

代码语言:javascript
复制
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   Demo.md

no changes added to commit (use "git add" and/or "git commit -a")

此时需要再次add,commit

log命令
代码语言:javascript
复制
$ git log
commit 7e328f841e08439649d4281ac6373ac50dec397d (HEAD -> master)
Author: wg <gw_9527@163.com>
Date:   Fri Nov 20 10:52:33 2020 +0800

    修改了demo.md中的内容

commit 6df164a4e39d8bc72d5eaaa4d8d76dded12d6622
Author: wg <gw_9527@163.com>
Date:   Fri Nov 20 10:33:28 2020 +0800

    这是我写的第一个文件 Demo.md

7e328f841e08439649d4281ac6373ac50dec397d 为该版本的key,真实数据为value。

一行显示

代码语言:javascript
复制
$ git log --pretty=oneline
7e328f841e08439649d4281ac6373ac50dec397d (HEAD -> master) 修改了demo.md中的内容
6df164a4e39d8bc72d5eaaa4d8d76dded12d6622 这是我写的第一个文件 Demo.md

wg@DESKTOP-AQLVI3K MINGW64 /e/GitResp (master)
$ git log --oneline
7e328f8 (HEAD -> master) 修改了demo.md中的内容
6df164a 这是我写的第一个文件 Demo.md
代码语言:javascript
复制
$ git reflog
7e328f8 (HEAD -> master) HEAD@{0}: commit: 修改了demo.md中的内容
6df164a HEAD@{1}: commit (initial): 这是我写的第一个文件 Demo.md

HEAD@{1}为由当前版本回退到该版本需要回退一个版本。

reset命令

回退到之前的版本

代码语言:javascript
复制
$ git reflog
80c8de4 (HEAD -> master) HEAD@{0}: commit: test.md中插入了dddfef
16cd72a HEAD@{1}: commit: test.md中插入了abcdefg
3e2d86f HEAD@{2}: commit: 创建了test.md
4a71c44 HEAD@{3}: commit: 第三次修改demo.md
7e328f8 HEAD@{4}: commit: 修改了demo.md中的内容
6df164a HEAD@{5}: commit (initial): 这是我写的第一个文件 Demo.md

wg@DESKTOP-AQLVI3K MINGW64 /e/GitResp (master)
$ git reset --hard 16cd72a
HEAD is now at 16cd72a test.md涓彃鍏ヤ簡abcdefg

hard之后写的是版本号。

版本号除了可以写之前的版本号,回退之后,亦可以填之后的版本号又退到后面。

代码语言:javascript
复制
git reset --hard[索引号]

使用hard参数时,会将此时的工作区,暂存区以及本地库中信息都修改了。

代码语言:javascript
复制
git reset --mixed[索引号]

只修改本地库以及暂存区,不会修改工作区.

代码语言:javascript
复制
git reset --soft[索引号]

只修改本地库,暂存区工作区都不会被修改。

删除恢复
代码语言:javascript
复制
// 删除工作区的文件
$ rm test1.md

// 将改文件的删除操作同步到暂存区
$ git add test1.md

// 将改文件的删除操作同步到本地库
$ git commit -m "删除test1.md文件" test1.md
[master ce54d21] 鍒犻櫎test1.md鏂囦欢
 1 file changed, 1 deletion(-)
 delete mode 100644 test1.md
代码语言:javascript
复制
$ git reflog
ce54d21 (HEAD -> master) HEAD@{0}: commit: 删除test1.md文件
8d09d2f HEAD@{1}: commit: 创建了test1.md
$ git reset --hard 8d09d2f

只需将历史版本切换到删除前的那个版本即可。

diff命令

用于比对文件的差异

test2.md提交到本地库后,将工作区中内容修改,在aaaaa之后增加bbb字符。

使用diff命令后,发现暂存区和工作区中改文件的差异为:先删除了aaaaa这一行,再增加的aaaaabbb这一行,这是由于git是按行为单位来管理数据的。

代码语言:javascript
复制
$ git diff test2.md
diff --git a/test2.md b/test2.md
index e4a7dd9..ac799e9 100644
--- a/test2.md
+++ b/test2.md
@@ -1 +1 @@
-aaaaa
\ No newline at end of file
+aaaaabbb
\ No newline at end of file

比较工作区与暂存区的文件,若不加文件名则比较多个文件之间的差异

代码语言:javascript
复制
git diff [文件名] 

比较暂存区与本地库某个版本之间的文件差异

代码语言:javascript
复制
git diff [历史版本] [文件名]

分支

版本控制过程中,使用多条线同时推进多个任务,多条线指的就是分支的概念。

多个分支可以并行工作,互不干扰,互不影响。

若上图所示,当需要添加一个新功能时创建一个分支,该分支从主分支复制而来,当新功能代码撰写完毕后再将该分支合并到主分支上面去,此外当主分支运行出现bug时从主分支开辟一个新的分支,再新的分支上debug,修复完毕后再将该分支合并到主分支。

创建分支

代码语言:javascript
复制
$ git branch [新创建的分支名]

查看分支

代码语言:javascript
复制
$ git branch -v

切换分支

代码语言:javascript
复制
$ git checkout [目标分支名]

分支合并,在主分支中执行如下命令

代码语言:javascript
复制
$ git merge [待合并的分支名]

当主分支以其他分支出现冲突(即两个分支修改了同一个文件)时

代码语言:javascript
复制
$ git merge branch01
Auto-merging test3.md
CONFLICT (content): Merge conflict in test3.md
Automatic merge failed; fix conflicts and then commit the result.

wg@DESKTOP-AQLVI3K MINGW64 /e/GitResp (master|MERGING)

执行完合并之后,此时处于(master|MERGING)状态。

解决:人为决定在工作区修改出现冲突的文件。并add commit

代码语言:javascript
复制
// 次数commit不需要带文件名
wg@DESKTOP-AQLVI3K MINGW64 /e/GitResp (master|MERGING)
$ git commit -m "解决了冲突处理"
[master b37fde2] 瑙e喅浜嗗啿绐佸鐞?
// commit之后状态就发生改变
wg@DESKTOP-AQLVI3K MINGW64 /e/GitResp (master)

远程库操作

使用github作为远程库。

为远程库起别个名:此处的origin为起的别名

代码语言:javascript
复制
$ git remote add origin https://github.com/gw7868/GitResp2.git
$ git remote -v
origin  https://github.com/gw7868/GitResp2.git (fetch)
origin  https://github.com/gw7868/GitResp2.git (push)

push操作

将本地库内容推送到远程库

代码语言:javascript
复制
git push [远程库的地址] [待推送的分支]
代码语言:javascript
复制
$ git push origin master
Logon failed, use ctrl+c to cancel basic credential prompt.
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 222 bytes | 7.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/gw7868/GitResp2.git
 * [new branch]      master -> master

clone操作

代码语言:javascript
复制
git clone [远程库的地址]

克隆之后,

1) 初始化本地库

2)完成远程库内容复制

3)远程库的别名亦复制

pull操作

是拉取和合并两个操作。

代码语言:javascript
复制
git pull [远程库地址] [分支名]

冲突解决

与分支合并时冲突类似,当其他人修改了改文件时并推送到远程库时,此时再对本地库中改文件修改再进行push时会出现冲突。

对于该情况首先拉取最新版本,此时本地库中会出现(master | merge)状态,和解决分支间冲突类似,在工作区人为修改改文件并提交到本地库再次推送即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • git结构
    • 本地结构
      • 代码托管中心
        • 团队内部协作
        • 团队间协作
    • git操作
      • 初始化本地仓库
        • add和commit命令
          • status命令
            • log命令
              • reset命令
                • 删除恢复
              • diff命令
              • 分支
              • 远程库操作
              相关产品与服务
              代码托管
              CODING 代码托管(CODING Code Repositories,CODING-CR)是为开发者打造的云端便捷代码管理工具,旨在为更多的开发者带去便捷、高效的开发体验,全面支持 Git/SVN 代码托管,包括代码评审、分支管理、超大仓库等功能。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档