Git最常用功能,这一篇就够了!(结合开发场景)
毫无疑问,Git是当下最流行、最好用的版本控制系统。Git属于分布式版本控制系统,相较于Subversion等集中式版本控制系统有很明显的优势。对于我们开发人员来说,熟练使用Git是最基本的技能之一。那么,今天就来说一下在开发工作中,使用到的Git的最基本、最常用的功能有那些?
克隆版本库
工作中,当接手维护一个项目时,需要从远程代码库将项目源码克隆到本地。或者,在Github上发现了一个非常好的开源项目,想要搞下来研究研究,第一步也是克隆版本库。
$ git clone git@github.com:hxdaxu/GitDemo.git
正克隆到 'GitDemo'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (3/3), done.
检查连接... 完成。
- 1
- 2
- 3
- 4
- 5
- 6
从Github上克隆代码库至本地的当前目录。
通过暂存区控制提交
Git有暂存区的概念,对于一次Commit只会将加入暂存区的变更提交,我们可以通过暂存区控制提交的内容。
$ echo home page ... done. >> homePage.txt $ echo show page ... developing... >> showPage.txt $ git status 位于分支 master 您的分支与上游分支 'origin/master' 一致。 未跟踪的文件: (使用 "git add <文件>..." 以包含要提交的内容)
homePage.txt showPage.txt
提交为空,但是存在尚未跟踪的文件(使用 “git add” 建立跟踪)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
我们假设homePage功能已经开发完成,showPage功能正在开发中,此时最好将已完成的功能先提交。可以看出,git的提醒功能很强大,通过 “git add <文件名>…” 指令将文件加入暂存区。
$ git add homePage.txt $ git status 位于分支 master 您的分支与上游分支 'origin/master' 一致。 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存)
新文件: homePage.txt
未跟踪的文件:
(使用 “git add <文件>…” 以包含要提交的内容)
showPage.txt
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
homePage已经处于暂存区了,提交只是针对暂存区的,我们将homePage功能提交。showPage不会受影响,可以继续showPage的开发。
$ git commit -m "首页开发完成" [master ec9541d] 首页开发完成 1 file changed, 1 insertion(+) create mode 100644 homePage.txt $ git status 位于分支 master 您的分支领先 'origin/master' 共 1 个提交。 (使用 "git push" 来发布您的本地提交) 未跟踪的文件: (使用 "git add <文件>..." 以包含要提交的内容)
showPage.txt
提交为空,但是存在尚未跟踪的文件(使用 “git add” 建立跟踪)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
使用 “git commit -m " message”" 对暂存区内容提交,"-m"参数是对本次提交添加一个描述信息,Git 不建议没有描述信息的提交。
diff差异比较
在本地修改了代码,准备将代码提交到服务器之前,一般我们需要对修改的代码进行下检查。如果修改点比较多,直接看代码检查时,往往容易遗漏,而且不够直观。这个场景下使用Git差异比较工具再合适不过了,差异比较工具会对比修改前后的文件,将差异点显示出来。
$ git diff
diff --git a/showPage.txt b/showPage.txt
index 0d62ae4..dd01952 100644
--- a/showPage.txt
+++ b/showPage.txt
@@ -1,7 +1,7 @@
show page ... developing...
我没被修改。
-这一行被删除了。
-这一行将被修改。
+这一行将被修改。追加,被修改。
+我是新添加的行。
我也没有被修改。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
对showPage修改后,使用 " git diff " 查看修改内容。看不懂??那可不行!
diff --git a/showPage.txt b/showPage.txt
这一行表明diff的输出格式是git类型的,后面的内容可以理解为是a版本的showPage和b版本的showPage进行比较。
index 0d62ae4..dd01952 100644
这一行涉及到Git对象的概念,意思是版本库index区的0d62ae4对象与工作区的dd01952对象进行比较。对象的ID是版本的哈希值,这里没有显示完全,前面显示出来的部分能确保独一无二即可。后面数字 100 表示文件类型为普通文件,644 表示对文件的操作权限,即 -rw-r–r-- 。
--- a/showPage.txt
用 " — " 表示a版本的showPage,+++ b/showPage.txt
用 " +++ " 表示b版本的showPage。
@@ -1,7 +1,7 @@
这里显示了两个版本的信息,前面的 " -1,7 " 表示从 a 版本的第 1 行开始,往下 7 行。后面的 " +1,7 " 表示从 b 版本的第 1 行开始,往下 7 行。
再下面展示的是文件内容,以 " - " 开头的行表示 a 版本存在,而 b 版本不存在。以 " + " 开头的行表示 b 版本存在,而 a 版本不存在。这两个符号都没有的行是上下文,两个版本中都存在。
这里还有一个问题,我们将修改后的文件加入暂存区后,再执行 " git diff " 指令发现没有差异信息输出。这是因为直接使用 " git diff " 查看的是工作区和暂存区的差异。不同参数的指令还有两个。
$ git diff --cached // 暂存区和 HEAD 的差异
$ git diff HEAD // 工作区和 HEAD 的差异
- 1
- 2
(HEAD 可以理解为一个头指针,表示当前工作区的基础版本,关于分支和 HEAD 的概念后面会说)
使用这两条指令都可以得到和上面相同的差异输出。
git忽略
对于一些编译产生文件,或者本地配置文件是不需要提交到版本库的。但是每次使用 git status 查看状态时,总会提示文件处于未跟踪状态,看着心烦。Git 提供了文件忽略功能,可以将不关心的文件添加到忽略清单中,再使用 git status 就不会看到这些文件了。需要说一点,忽略只对未加入版本库的文件有效。下面介绍两种忽略方式。
第一种是共享式。创建一个名为 " .gitignore " 的文件,将要忽略的文件和目录写入,然后把该文件提交到版本库中,这样所有克隆的版本库都可以共享这个忽略文件。(也可以不加入版本库,做为独享忽略文件使用,可以把忽略文件自身也加入到忽略清单中)
$ vi .gitignore
- 1
$ cat .gitignore
*.class
bin/
*.iml
note.txt
- 1
- 2
- 3
- 4
- 5
文件名可以使用通配符。
第二种是独享式。编辑.git/info/exclude
,将要忽略的文件和目录写入即可。
分支是什么?
git中的每次提交都是基于上次提交的(除了初始提交,它没有父提交),所以整个提交历史可以串成一条线,而一次提交就可以理解为线上的一个节点。如图:
图中A、B、C、D…均是一次提交,master和branch_feature为两个分支。我们实际操作演示下图中的场景。
$ git branch
* master
- 1
- 2
使用git branch命令查看本地分支情况,有 " * " 号标识的为当前所处分支,可以看出目前本地只有一个分支master。
$ git log --oneline -5
a4ecd06 commit E
d27551e commit D
156bc90 commit C
eaa734e commit B
fc0645e commit A
- 1
- 2
- 3
- 4
- 5
- 6
对 master 分支进行 5 次提交,使用$ git log --oneline -5
命令查看最近 5 次的提交信息,提交信息简短显示。git中的一次提交是一个commit对象,有自己的ID和描述,commitID使用40位的SHA1哈希值字符串表示(这里没有完全显示,只要不与其他ID冲突即可)。" commit E " 是本次提交的描述信息。
$ git branch branch_feature d27551e
$ git branch
branch_feature
* master
$ git checkout branch_feature
切换到分支 'branch_feature'
$ git log --oneline -4
d27551e commit D
156bc90 commit C
eaa734e commit B
fc0645e commit A
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
使用$ git branch branch_feature d27551e
命令基于提交 " d27551e commit D " 创建新分支 " branch_feature " 。使用检出命令 $ git checkout branch_feature
切换到 " branch_feature " 分支,然后查看提交历史,当前分支最后提交为commit D ,并且具有自 D 以前的所有提交历史。
那么分支到底是什么呢?分支其实就是一个引用,它指向一次提交,该提交是本分支的最后一次提交。分支的存在形式是.git/refs/heads
目录下的一个文件。我们研究一下这个文件。
$ ls .git/refs/heads/
branch_feature master
- 1
- 2
这个目录下有两个文件,刚好对应本地的两个分支。看一下这个文件的内容:
$ cat .git/refs/heads/branch_feature
d27551e1d893e3bb52ec255fda33102419a0f8a8
- 1
- 2
文件内容是一个id,再看下这个id对应的是什么:
$ git cat-file -t d27551e1d89
commit
- 1
- 2
是一个commit对象,看一下这个commit对象的详细信息:
$ git cat-file -p d27551e1d89
tree c350f8c30083edb9c60b688e5f09bd9f7896d2f3
parent 156bc9054a5e6a3e3f3ec8914644e70829dcd01c
author huangxu <hxdaxu9934@163.com> 1499238679 +0800
committer huangxu <hxdaxu9934@163.com> 1499238679 +0800
commit D
- 1
- 2
- 3
- 4
- 5
- 6
- 7
正是 commit D 。
既然分支是一个引用,当该分支上有新的提交发生时,这个引用会发生什么变化呢?以下创建一个新的提交:
$ echo F > F $ git add F $ git commit -m "commit F" [branch_feature aaea208] commit F 1 file changed, 1 insertion(+) create mode 100644 F $ git log -1 commit aaea2082dfcb5ec21dcc14dda1e207c53325eeff Author: huangqingchun <huangqingchun@gionee.com> Date: Wed Jul 5 17:47:29 2017 +0800
commit F
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
看一下分支文件内容:
$ cat .git/refs/heads/branch_feature
aaea2082dfcb5ec21dcc14dda1e207c53325eeff
- 1
- 2
正是 commit F 的 ID ,分支引用已经指向了提交 F 。分支上有新的提交发生时,分支文件内容会被更新,内容始终是该分支的最后一次提交。
分支也可以理解为一条提交历史线,提交或重置操作会使提交历史线增长或缩短。
现在本地版本库存在了两个分支,在这两个分支上可以分别提交代码,彼此不会受影响。
HEAD是什么?
在对提交重置时,会用到git reset --soft HEAD^
命令。HEAD 是什么呢?
HEAD 也是一个引用或者指针,不同于分支,HEAD代表的是当前工作区,它的存在形式是文件.git/HEAD
。
$ cat .git/HEAD
ref: refs/heads/branch_feature
- 1
- 2
HEAD 指向了 branch_feature 分支!分支指向具体的提交,这样便确定了工作区的状态。当切换分支时, HEAD 的内容会被改变,指向新的分支。
使用检出命令 git checkout < branch_name > 切换分支,如果此命令后面不使用分支名,而用具体的提交 id ,HEAD 的内容也会变为具体的提交id(分离头指针状态),这个状态下的提交不会被任何分支记录,如非特殊需要,一般也不会 checkout commitID 。
其实,上面我们做的提交,并不是直接作用于分支的,而是 HEAD ,是不过当前 HEAD 是指向分支 branch_feature 的。表现就是提交和重置操作改变了 HEAD ,而 HEAD 指向当前分支,当前分支所指向的具体 commitID 被改变。如果 HEAD 指向具体的 commitID (分离头指针状态),提交或重置操作就不会影响分支,也就不会被分支记录下来。
分支可以理解为分出来的不同提交历史线,头指针HEAD 可以在这些提交历史线之间切换,也可以在某条线上面滑动。
cherry-pick 功能
开发工作中不要在主分支直接操作。如果新功能开发周期比较长,应该创建一个新的本地分支,在该分支开发提交,新功能完成后再合入主分支。
cherry-pick 功能是拣选一个提交应用于当前分支,就是将一个提交放在当前HEAD上形成一个新的完全一样的提交。下面在 branch_feature 分支创建一个提交,然后 cherry-pick 到 master 分支。
$ git diff
diff --git a/showPage.txt b/showPage.txt
index 0d62ae4..aea47d9 100644
--- a/showPage.txt
+++ b/showPage.txt
@@ -1,7 +1,6 @@
show page ... developing...
我没被修改。
-这一行被删除了。
-这一行将被修改。
+这一行已经被修改。修改人huangxu。
我也没有被修改。
$ git add showPage.txt
$ git commit -m “修改showPage”
[branch_feature b6e1a56] 修改showPage
1 file changed, 1 insertion(+), 2 deletions(-)
$ git status
位于分支 branch_feature
无文件要提交,干净的工作区
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
然后切换到 master 分支,并查看 branch_feature 分支的提交历史。
$ git checkout master
$ git log branch_feature --oneline -1
b6e1a56 修改showPage
$ git cherry-pick b6e1a56
[master 25f1dc0] 修改showPage
1 file changed, 1 insertion(+), 2 deletions(-)
$ git log --oneline -1
25f1dc0 修改showPage
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
使用 git cherry-pick 执行拣选操作,上面的输出看出已经在 master 分支形成了新的提交,下面看一下内容是否发生了变化。
$ cat showPage.txt
show page ... developing...
我没被修改。
这一行已经被修改。修改人huangxu。
我也没有被修改。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
内容也已经发生了变化。
冲突解决
以 cherry-pick 为例,如果双方对同一文件的同一位置分别做了不同的提交,在合入时就会发生冲突,需要将冲突解决才能完成合入。
上个例子中在 branch_feature 修改了showPage 文件,下面在 master 分支修改相同位置并完成提交,这样在 cherry-pick 时就会发生冲突。
$ git diff
diff --git a/showPage.txt b/showPage.txt
index 0d62ae4..cd2ad48 100644
--- a/showPage.txt
+++ b/showPage.txt
@@ -1,7 +1,6 @@
show page ... developing...
我没被修改。
-这一行被删除了。
-这一行将被修改。
+这一行被修改。修改人hxdaxu。
我也没有被修改。
$ git add .
$ git commit -m “hxdaxu修改showPage”
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
下面执行拣选操作,查看输出信息。
$ git cherry-pick b6e1a56
error: 不能应用 b6e1a56... 修改showPage
提示:冲突解决完毕后,用 'git add <paths>' 或 'git rm <paths>'
提示:对修正后的文件做标记,然后用 'git commit' 提交
- 1
- 2
- 3
- 4
提示错误,需要解决冲突,查看下当前状态。
$ git status
位于分支 master
您在执行拣选提交 b6e1a56 的操作。
(解决冲突并运行 “git cherry-pick --continue”)
(使用 “git cherry-pick --abort” 以取消拣选操作)
未合并的路径:
(使用 “git add <file>…” 标记解决方案)
双方修改: showPage.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
git 给出提示有双方修改的位置,git 是不能帮用户决定以哪次修改为准的。我们使用手动修改的方式解决冲突,先查看一下文件内容:
$ cat showPage.txt
show page ... developing...
我没被修改。
<<<<<<< HEAD
这一行被修改。修改人hxdaxu。
这一行已经被修改。修改人huangxu。
>>>>>>> b6e1a56… 修改showPage
我也没有被修改。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
git 对冲突位置做了标记。我们已经知道 HEAD 代表的是当前工作区的一个基础版本,在<<<<<<< HEAD
与=======
之间的是当前分支的修改,在=======
与>>>>>>> b6e1a56... 修改showPage
之间是所合入版本的修改,也就是 branch_feature 分支做的修改。下面修改文件内容将冲突解决,标记去掉:
$ cat showPage.txt
show page ... developing...
我没被修改。
这一行被修改。修改人hxdaxu和huangxu.
我也没有被修改。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
解决冲突后,提交,完成合入操作。
$ git add showPage.txt
$ git commit -m "共同对showPager的修改"
[master bf9069c] 共同对showPager的修改
1 file changed, 1 insertion(+), 1 deletion(-)
$ git status
位于分支 master
您的分支领先 'origin/master' 共 2 个提交。
(使用 "git push" 来发布您的本地提交)
无文件要提交,干净的工作区
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
提交后在查看状态,错误信息已经不见了,冲突解决了。
git stash 保存工作进度
当在 branch_feature 开发新功能,还在开发中,突然有个紧急任务,需要切换到 master 分支修复一个 bug 。我们希望切换到 master 分支时有个干净的工作区,这时有两个选择,将未完成的任务提交,或者保存当前工作进度。我们采用保存工作进度的做法:
$ git add settingsPage $ git status 位于分支 branch_feature 要提交的变更: (使用 "git reset HEAD <file>..." 撤出暂存区)
新文件: settingsPage
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
对于未跟踪的文件需要先添加到暂存区,才可以保存进度。
$ git stash
Saved working directory and index state WIP on branch_feature: b6e1a56 修改showPage
HEAD 现在位于 b6e1a56 修改showPage
$ git status
位于分支 branch_feature
无文件要提交,干净的工作区
- 1
- 2
- 3
- 4
- 5
- 6
- 7
使用git stash
保存进度后,工作区的变动都被保存了下来,这时可以切换到其他分支处理问题,之后再切换回来恢复进度就可以了:
$ git stash pop 位于分支 branch_feature 要提交的变更: (使用 "git reset HEAD <file>..." 撤出暂存区)
新文件: settingsPage
丢弃了 refs/stash@{0} (729d13b1a47a81479b75175f7677182acd6c1ce4)
$ git status
位于分支 branch_feature
要提交的变更:
(使用 “git reset HEAD <file>…” 撤出暂存区)
新文件: settingsPage
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
使用git stash pop
恢复进度,工作区的变动又回来了,关于进度保存还有些实用的功能:
$ git stash save "保存settingsPage" Saved working directory and index state On branch_feature: 保存settingsPage HEAD 现在位于 b6e1a56 修改showPage $ git stash list stash@{0}: On branch_feature: 保存settingsPage $ git stash pop stash@{0} 位于分支 branch_feature 要提交的变更: (使用 "git reset HEAD <file>..." 撤出暂存区)
新文件: settingsPage
丢弃了 stash@{0} (04036d18ac1845b900951f94df76c9b378c4ef59)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
进度保存时可以使用git stash save "message"
添加一个描述。进度保存可以保存多处,使用git stash list
查看进度保存列表,并可以选择需要恢复的进度。
文中指令汇总
$ git config --global user.name "Your Name" // 配置用户名
$ git config --global user.email "Your Email" // 配置邮箱
$ git add <file name> // 将修改内容添加至暂存区
$ git add --all // 添加所有改变的已跟踪文件和未跟踪文件
$ git diff // 工作区和暂存区差异比较
$ git diff --cached // 暂存区和 HEAD 的差异
$ git diff HEAD // 工作区和 HEAD 的差异
$ git status // 查看当前状态
$ git commit -m “message” // 提交说明
$ git reset --soft HEAD^ // 重置上次提交,保留修改的内容
$ git reset --hard HEAD^ // 彻底重置上次提交,不保留修改
$ git reset --hard <commit id> // 彻底重置至某次提交,不保留修改
$ git log // 查看提交历史
$ git log --oneline // 提交历史简短显示
$ git log -5 // 查看最近5条提交历史
$ git checkout <branch_name> // 切换分支
$ git checkout -b <branch_name> // 创建并切换到该分支
$ git branch // 查看本地分支列表
$ git branch <branch_name> // 创建新分支,基于当前HEAD
$ git branch -D <branch_name> // 删除分支
$ git stash // 保存进度
$ git stash pop // 恢复最近一次保存的进度
$ git stash save “message” // 保存进度,并添加一个描述
$ git stash list // 查看保存的进度列表
$ git cherry-pick <commit ID> // 拣选一次提交应用于当前HEAD
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
有问题可以在公众号后台联系我,我看到都会回复的。
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e44c3c0e64.css" rel="stylesheet">
</div>
</article>
<div class="recommend-box"><div class="recommend-item-box type_blog clearfix" data-report-click="{"mod":"popu_387","dest":"https://blog.youkuaiyun.com/qq_36672905/article/details/82776293","strategy":"BlogCommendFromMachineLearnPai2","index":"0"}">
<div class="content" style="width: 852px;">
<a href="https://blog.youkuaiyun.com/qq_36672905/article/details/82776293" target="_blank" rel="noopener" title="git分支(存在意义和使用方法)">
<h4 class="text-truncate oneline" style="width: 692px;">
<em>git</em>分支(存在意义和使用方法) </h4>
<div class="info-box d-flex align-content-center">
<p class="date-and-readNum oneline">
<span class="date hover-show">09-19</span>
<span class="read-num hover-hide">
阅读数
2773</span>
</p>
</div>
</a>
<p class="content" style="width: 852px;">
<a href="https://blog.youkuaiyun.com/qq_36672905/article/details/82776293" target="_blank" rel="noopener" title="git分支(存在意义和使用方法)">
<span class="desc oneline">Git分支简介Git分支是由指针管理起来的,所以创建、切换、合并、删除分支都非常快,非常适合大型项目的开发。在分支上做开发,调试好了后再合并到主分支。那么每个人开发模块式都不会影响到别人。分支使用策略...</span>
</a>
<span class="blog_title_box oneline ">
<span class="type-show type-show-blog type-show-after">博文</span>
<a target="_blank" rel="noopener" href="https://blog.youkuaiyun.com/qq_36672905">来自: <span class="blog_title"> qq_36672905的博客</span></a>
</span>
</p>
</div>
</div>
推荐!手把手教你使用Git(转)
10-27 阅读数 40
原文出处:涂根华的博客欢迎分享原创到伯乐头条一:Git是什么?Git是目前世界上最先进的分布式版本控制系统。二:SVN与Git的最主要的区别?SVN是集中式版本控制系统,版本库是集中放在中央服务器的,... 博文 来自: weixin_30906671的博客
git 经常用到的功能总结
06-26 阅读数 1609
记录自己平时使用到的常用命令,持续跟进。gitinit 初始化一个仓库不带任何参数,在当前目录下生成一个.git目录--separate-git-dir参数,可以指定.git的目录位置gitadd 把... 博文 来自: socay 的专栏
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_59" data-pid="59" data-report-view="{"mod":"kp_popu_59-78","keyword":""}" data-report-click="{"mod":"kp_popu_59-78","keyword":""}"><script type="text/javascript">
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div style="" id="' + s + '"></div>');
(window.slotbydup = window.slotbydup || []).push({
id: "u3491668",
container: s
});
})();
Git 常用功能总结
02-21 阅读数 442
常用的git命令总结mkdirxxxx//创建文件夹,文件夹的名字为xxxxgitinit//初始化仓库gitadd'文件名.格式'//提交文件,可以一次提交多个,格式为gitadd'文件名1.格式'... 博文 来自: x先生的博客
Git 一些基础操作命令
11-13 阅读数 636
原网站:http://www.bootcss.com/p/git-guide/http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248... 博文 来自: lajiasd123的博客
<div class="recommend-item-box recommend-download-box clearfix" data-report-click="{"mod":"popu_387","dest":"https://download.youkuaiyun.com/download/weixin_45028365/11164242","strategy":"BlogCommendFromBaidu2","index":"6"}">
<a href="https://download.youkuaiyun.com/download/weixin_45028365/11164242" rel="noopener" target="_blank">
<div class="content clearfix">
<div class="">
<h4 class="text-truncate oneline clearfix">
<em>git</em>的功能简要介绍 </h4>
<span class="data float-right">05-07</span>
</div>
<div class="desc oneline">
详细、简洁描述如何实施敏捷管理,简单、易懂。注重实践而非纯理论。 </div>
<span class="type-show type-show-download">下载</span>
</div>
</a>
</div>
git add时有几个文件死活add不了
新建的库,使用git add .添加目录下所有文件。使用git status查看时,发现有几个文件死活添加不了,使用了git add **/* 、git add -A等都添加不了。 根目录中的文件: 论坛
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_60" data-pid="60"><iframe src="https://adaccount.youkuaiyun.com/#/preview/552?m=tpEcJfvtLtHtLbLpcnpmSUAppnbtJntJHccnintnnoopipHXbEtEQESJbHJvEJnLpvEAtEDtHbniiiLLnbAAEbQnEpWcbpHDnQAQ&k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.youkuaiyun.com/1.png?d=2&k=&m=tpEcJfvtLtHtLbLpcnpmSUAppnbtJntJHccnintnnoopipHXbEtEQESJbHJvEJnLpvEAtEDtHbniiiLLnbAAEbQnEpWcbpHDnQAQ"></div></div>
git 标签使用 详解
10-26 阅读数 4460
标签使用(Tag)标签作用:在开发的一些关键时期,使用标签来记录这些关键时刻,例如发布版本,有重大修改,升级的时候,会使用标签记录这些时刻,来永久标记项目中的关键历史时刻;查看标签:列出的标签安装AS... 博文 来自: 偶木
<div class="recommend-item-box blog-expert-recommend-box" style="display: block;">
<div class="d-flex">
<div class="blog-expert-recommend">
<div class="blog-expert">
<div class="blog-expert-flexbox" data-report-view="{"mod":"popu_709","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><a href="https://blog.youkuaiyun.com/qq_36672905" target="_blank"><img src="https://avatar.youkuaiyun.com/0/D/8/3_qq_36672905.jpg" alt="DonnieKing" title="DonnieKing"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><span class="blog-expert-button-follow btn-red-follow" data-name="qq_36672905" data-nick="DonnieKing">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><a href="https://blog.youkuaiyun.com/qq_36672905" target="_blank"><h5 class="oneline" title="DonnieKing">DonnieKing</h5></a></span> <p></p><p class="article-num" title="36篇文章"> 36篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><a href="https://blog.youkuaiyun.com/weixin_30906671" target="_blank"><img src="https://avatar.youkuaiyun.com/7/2/B/3_weixin_30906671.jpg" alt="weixin_30906671" title="weixin_30906671"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><span class="blog-expert-button-follow btn-red-follow" data-name="weixin_30906671" data-nick="weixin_30906671">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><a href="https://blog.youkuaiyun.com/weixin_30906671" target="_blank"><h5 class="oneline" title="weixin_30906671">weixin_30906671</h5></a></span> <p></p><p class="article-num" title="3859篇文章"> 3859篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><a href="https://blog.youkuaiyun.com/hellocsz" target="_blank"><img src="https://avatar.youkuaiyun.com/B/F/8/3_hellocsz.jpg" alt="hellocsz" title="hellocsz"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><span class="blog-expert-button-follow btn-red-follow" data-name="hellocsz" data-nick="hellocsz">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><a href="https://blog.youkuaiyun.com/hellocsz" target="_blank"><h5 class="oneline" title="hellocsz">hellocsz</h5></a></span> <p></p><p class="article-num" title="754篇文章"> 754篇文章</p><p class="article-num" title="排名:6000+"> 排名:6000+</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><a href="https://blog.youkuaiyun.com/It_way" target="_blank"><img src="https://avatar.youkuaiyun.com/0/0/B/3_it_way.jpg" alt="滴答滴答D" title="滴答滴答D"></a><span data-report-click="{"mod":"popu_710","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><span class="blog-expert-button-follow btn-red-follow" data-name="It_way" data-nick="滴答滴答D">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.youkuaiyun.com/h247263402/article/details/74849182"}"><a href="https://blog.youkuaiyun.com/It_way" target="_blank"><h5 class="oneline" title="滴答滴答D">滴答滴答D</h5></a></span> <p></p><p class="article-num" title="23篇文章"> 23篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div></div>
</div>
</div>
</div>
</div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{"mod":"popu_387","dest":"https://blog.youkuaiyun.com/ddnosh/article/details/79007849","strategy":"searchFromBaidu1","index":"6"}" data-report-click="{"mod":"popu_387","dest":"https://blog.youkuaiyun.com/ddnosh/article/details/79007849","strategy":"searchFromBaidu1","index":"6"}" data-track-view="{"mod":"popu_387","dest":"https://blog.youkuaiyun.com/ddnosh/article/details/79007849","strategy":"searchFromBaidu1","index":4,"extend1":"_"}" data-track-click="{"mod":"popu_387","dest":"https://blog.youkuaiyun.com/ddnosh/article/details/79007849","strategy":"searchFromBaidu1","index":4,"extend1":"_"}" data-flg="true"> <a href="https://blog.youkuaiyun.com/ddnosh/article/details/79007849" target="_blank"> <h4 class="text-truncate oneline" style="width: 766px;"><em>Git</em>常见使用<em>场景</em> - ddnosh的博客 - 优快云博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">10-21</span> </p> </div> </a> </div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{"mod":"popu_387","dest":"https://blog.youkuaiyun.com/aimee12345/article/details/82189808","strategy":"searchFromBaidu1","index":"7"}" data-report-click="{"mod":"popu_387","dest":"https://blog.youkuaiyun.com/aimee12345/article/details/82189808","strategy":"searchFromBaidu1","index":"7"}" data-track-view="{"mod":"popu_387","dest":"https://blog.youkuaiyun.com/aimee12345/article/details/82189808","strategy":"searchFromBaidu1","index":5,"extend1":"_"}" data-track-click="{"mod":"popu_387","dest":"https://blog.youkuaiyun.com/aimee12345/article/details/82189808","strategy":"searchFromBaidu1","index":5,"extend1":"_"}" data-flg="true"> <a href="https://blog.youkuaiyun.com/aimee12345/article/details/82189808" target="_blank"> <h4 class="text-truncate oneline" style="width: 774px;"><em>git</em>常见的应用<em>场景</em> - aimee12345的博客 - 优快云博客</h4> <div class="info-box d-flex align-content-center"> <p> <span class="date">11-2</span> </p> </div> </a> </div>
开发中常用GIT命令详解(结合开发场景)--新手入门
09-03 阅读数 124
大家好,如今git在代码管理中已经逐渐占据主流,但据观察大多数人喜欢借助可视化工具来使用git,很少有人会去花太多心思去研究git了解git命令。甚至一些中小项目依然使用单分支开发。本文结合我... 博文 来自: anmingda1990的博客
Git有这一篇就够了
12-14 阅读数 3112
在日常工作中,经常会用到Git操作。但是对于新人来讲,刚上来对Git很陌生,操作起来也很懵逼。本篇文章主要针对刚开始接触Git的新人,理解Git的基本原理,掌握常用的一些命令。一、Git工作流程以上包... 博文 来自: perry_Fan
史记官:git 和 GitHub 的功能与益处
06-21 阅读数 252
GitHub[点击]是一个代码托管平台,它可以理解为一个以时间轴为重的云端服务器,可以用来追踪每一个文件夹里面文件修改的历史状态,并且让多个人同时编辑同一份文件,在彼此编辑内容不冲突的情况下,完成团队... 博文 来自: Kuo_Jun_Lin的博客
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_61" data-pid="61"><iframe src="https://adaccount.youkuaiyun.com/#/preview/261?m=tcQJLStQHcJDJyHLcbLQmUHppiEELiXcHSAAiDEXbSncESHQJEWpJcfiQnSmELLJQpESpnntEJEELpStXQLUSEEJJiHLAbctEQiQ&k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.youkuaiyun.com/1.png?d=2&k=&m=tcQJLStQHcJDJyHLcbLQmUHppiEELiXcHSAAiDEXbSncESHQJEWpJcfiQnSmELLJQpESpnntEJEELpStXQLUSEEJJiHLAbctEQiQ"></div></div>
Git Tag作用以及如何打标签
02-20 阅读数 1763
1.官方解释Gittag给当前分支打标签2.个人解释其实道理和commit的commit-sha1有些相似,其实就是给当前的版本做个标记,以便回退到此版本。如果使用commit-sha1,大家都记不住... 博文 来自: u013452335的博客
Git-命令行-使用 Tag 标记你的代码
10-21 阅读数 32
前言正文开始之前,我想我们需要弄明白几个问题:1.tag是什么? 2.使用tag的好处? 3.tag和branch的区别以及使用场景?tag是什么? tag,翻译过来是标签的意思,顾名思义,标签是为了... 博文 来自: Arthas的博客
1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题
11-23 阅读数 8498
1新建一个存储git的文件夹,命令是:toto@toto-K45VD:~$mkdirgitfolder2初始化一个git仓库,命令是:toto@toto-K45VD:~$ cdgitfolder/... 博文 来自: 涂作权的博客
git的简单使用(1)
01-31 阅读数 589
1.git的功能: git用来管理源代码,保留工程源代码历史状态的命令行工具。系统资源也是源代码的一部分。当你需要得到以前的一个保存点时,你可以利用它来追踪项目中的文件,并且得到某些时间点提交的... 博文 来自: hellofeiya的专栏
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_62" data-pid="62"><iframe src="https://adaccount.youkuaiyun.com/#/preview/264?m=icLQtiQHJntcbJnStLAiJEDypnEitJHcnESQJmXptpiiSbHinnAiXJDnJHDbtJXfJtHEpQWQnDfSmDQbAtoSEEpEvbHcLSbQiiJQ&k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.youkuaiyun.com/1.png?d=2&k=&m=icLQtiQHJntcbJnStLAiJEDypnEitJHcnESQJmXptpiiSbHinnAiXJDnJHDbtJXfJtHEpQWQnDfSmDQbAtoSEEpEvbHcLSbQiiJQ"></div></div>
Git 使用篇二:小组协作开发
09-27 阅读数 1
上一片搭建了git远程服务器,那么小组成员在使用git开发的时候都有什么要注意的。第一步:首先每个小组成员,在自己本地建立一个目录,作为工作空间,再去gitclone这个远程仓库:gitclonegi... 博文 来自: weixin_30912051的博客
使用git开发新功能,新需求
03-01 阅读数 7248
使用git创建新分支开发新功能一般步骤相信很多人都已经开始用git开发了,但是还是记不清一些命令,下面我归纳一下从现有git仓库创建新分支开发新功能的一些命令.第一步:从现有仓库的master分支创建... 博文 来自: Eicky
图文详解 Git 的使用场景
11-17 阅读数 326
无论学习什么技术,都需要了解该技术的本质。若是靠死记硬背该技术提供的方法或者语法,终归是知其然而不知其所以然,当发现错误时,你根本不知道是什么原因导致的。我在使用Git时,就处于这种知其然而不知其所以... 博文 来自: newpiaoyun的专栏
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_63" data-pid="63" data-report-view="{"mod":"kp_popu_63-624","keyword":""}" data-report-click="{"mod":"kp_popu_63-624","keyword":""}"><script type="text/javascript">
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div style="" id="' + s + '"></div>');
(window.slotbydup = window.slotbydup || []).push({
id: "u4221910",
container: s
});
})();
(Git入门1)Git是干什么的?
12-18 阅读数 1752
Git是什么?Git是目前世界上最先进的分布式版本控制系统(没有之一)。Git有什么特点?简单来说就是:高端大气上档次!那什么是版本控制系统?如果你用MicrosoftWord写过长篇大论,那你一定有... 博文 来自: 咚匀
git的深入理解与使用
04-09 阅读数 4641
一、git的深入了解:用git有一段时间了,总是感觉自己对它的认识是少之又少。现在趁此机会总结一下,以使加深自己对git的理解。我们都知道,git是一款免费开源的分布式版本控制系统,用于敏捷高效的处理... 博文 来自: ……
Git最基本的7个功能使用方法
06-17 阅读数 82
1、在project的文件夹下创建版本库gitinit2、例如将编写好的readme.txt添加到本地git仓库gitaddreadme.txtgitcommit-m“hereisthecontent... 博文 来自: elite666的专栏
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_64" data-pid="64" data-report-view="{"mod":"kp_popu_64-626","keyword":""}" data-report-click="{"mod":"kp_popu_64-626","keyword":""}"><script type="text/javascript">
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div style="" id="' + s + '"></div>');
(window.slotbydup = window.slotbydup || []).push({
id: "u3600856",
container: s
});
})();
世上最详细的git原理解释(转载)
06-14 阅读数 7190
原文路径是https://www.cnblogs.com/cb0327/p/5066685.html目录1.提交代码到远程仓库2.将远程仓库代码更新到本地3.更新到本地仓库时,出现冲突,解决冲突后记:... 博文 来自: yangstarss的专栏
git命令行执行pull之后会有在merging状态
06-11 阅读数 9436
git命令行执行pull之后会有在merging状态,出现&lt;&lt;&lt;&lt;&lt;&lt;HEAD &gt;&gt;&a... 博文 来自: ZhangJiQun的博客
git进阶之分支的简单用途
04-23 阅读数 1620
git进阶一(分支)为什么要创建安分支?比如我们开发完了一个app上线了,接下那就是迭代功能开发了,如果上线的app出现了一个严重的bug,要你放下手头新功能的开发去解决这个bug,然后在发布一个新版... 博文 来自: 前端小狮的博客
Git基本使用(概念和命令)
11-28 阅读数 4040
概念篇Git简介: 鉴于有些同学可能还不知道Git是什么,我首先对Git做个简短的介绍。Git就是类似于svn的一个版本控制工具,他其实和hg更像一些,hg也是一个分布式版本控制工具,可... 博文 来自: zhangll_2008的博客
git add的作用
07-26 阅读数 907
gitadd的作用git add是个多功能的命令1,跟踪: git add:跟踪当前目录下所有文件 git add &lt;filename&gt;:跟踪文件&lt;fil... 博文 来自: 喜豆老爹的博客
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_65" data-pid="65" data-report-view="{"mod":"kp_popu_65-1378","keyword":""}" data-report-click="{"mod":"kp_popu_65-1378","keyword":""}"><script type="text/javascript">
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div style="" id="' + s + '"></div>');
(window.slotbydup = window.slotbydup || []).push({
id: "u4221803",
container: s
});
})();
git 常用操作集锦
05-31 阅读数 1万+
创建仓库新建普通仓库:jxdong@ubuntu-server:~/workspace/git$gitinitReinitializedexistingGitrepositoryin/home/jxd... 博文 来自: 增阅笔记
个人Git使用记录---add技巧篇
11-21 阅读数 1015
当你add很多文件的时候不能在gitaddfile1file2…添加当前目录下的所有文件和子目录gitadd.位于分支master初始提交要提交的变更:(使用"gitrm--cached..."撤出暂... 博文 来自: 绝黛雨儿
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_66" data-pid="66" data-report-view="{"mod":"kp_popu_66-87","keyword":""}" data-report-click="{"mod":"kp_popu_66-87","keyword":""}"><div id="three_ad38" class="mediav_ad"></div>
git入门:概念、原理、使用
09-23 阅读数 1万+
git和Github 概念Git --- 版本控制工具(命令)。工具介绍官方网站:http://git-scm.com工具下载地址:http://git-scm.com/download/git是一个... 博文 来自: 勇往直前的专栏
Git最常用的几个操作
10-22 阅读数 5560
Git最常用的几个操作转至元数据结尾转至元数据起始上面这张图是我最开始学Git,按照自己的理解画出来的,可能会有问题,但总体问题不大。其实Git是个非常复杂的系统,很多细节的特性,平时用到的不多,我也... 博文 来自: Richard_Jason的专栏
git常用指令及其作用
06-29 阅读数 2406
最近在学习git,我的远程仓库用的码云(git@gitee.com),码云对远程仓库的使用讲解的非常的好。在这篇文章中我尽量使自己的语言精确,因为我在查阅资料的时候经常会被一些错误的文章误导,如果有什... 博文 来自: lei133691的博客
Git是什么鬼,适合小白观看~
01-16 阅读数 6074
首先我是上来就开始用Git,然后同事跑我这里一顿命令,窗口从哪里打开的都不知道,操作完问题解决就走了,what?我完全没看懂他在做什么,下一次无论我要克隆项目还是提交我还是不会,于是同事又过来一顿弄,... 博文 来自: Seina
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_67" data-pid="67" data-report-view="{"mod":"kp_popu_67-658","keyword":""}" data-report-click="{"mod":"kp_popu_67-658","keyword":""}"><script type="text/javascript">
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div style="" id="' + s + '"></div>');
(window.slotbydup = window.slotbydup || []).push({
id: "u4623113",
container: s
});
})();
来讲讲Git这个玩意到底该怎么用?
03-17 阅读数 657
摘自:http://my.oschina.net/u/150705/blog/191534目前最火的版本控制软件就是Git了吧?你要是还用SVN或者CVS什么的都不好意思在圈里打招呼!前天我就遇到这种... 博文 来自: JCRunner的专栏
5分钟告诉你git是什么?
10-13 阅读数 4137
自从我参加纽约Flatiron学校的iOS课程已经一个星期了,可以说在这7天里面我学到了很多东西。上课的内容、指导老师、同学都是顶尖的,所以我心存感激能有这样的学习机会。Git和Github是我们第一... 博文 来自: u012028371的博客
Git常见命令对比与图解全集
07-09 阅读数 3147
以下所有内容都来自于网络,一部分来自于自己的理解。完整文章内容请在[我的github阅读](https://github.com/liangklfangl/react-article-bucket/t... 博文 来自: 高山上的鱼
git是什么、为什么要用它
03-10 阅读数 765
在如今的互联网时代,一个应用往往是多个模块组成的且由多个人员构成。工作当中往往避免不了对代码的管理,由人工管理代码是很麻烦的,这时候就出现了代码管理工具gitgit是什么Git是目前世界上最先进的分布... 博文 来自: 徐小鹏的博客
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_68" data-pid="68" data-report-view="{"mod":"kp_popu_68-625","keyword":""}" data-report-click="{"mod":"kp_popu_68-625","keyword":""}"><script type="text/javascript">
(function() {
var s = "_" + Math.random().toString(36).slice(2);
document.write('<div style="" id="' + s + '"></div>');
(window.slotbydup = window.slotbydup || []).push({
id: "u4623747",
container: s
});
})();
<div class="recommend-item-box type_hot_word">
<div class="content clearfix" style="width: 852px;">
<div class="float-left">
<span>
<a href="https://www.youkuaiyun.com/gather_10/NtzaYgysLWRvd25sb2Fk.html" target="_blank">
c#改变td值</a>
</span>
<span>
<a href="https://www.youkuaiyun.com/gather_1e/NtzaYgzsLWRvd25sb2Fk.html" target="_blank">
c#怎么读取html文件</a>
</span>
<span>
<a href="https://www.youkuaiyun.com/gather_15/NtzaYg0sLWRvd25sb2Fk.html" target="_blank">
c#如何跳出整个循环</a>
</span>
<span>
<a href="https://www.youkuaiyun.com/gather_1d/NtzaYg1sLWRvd25sb2Fk.html" target="_blank">
c# throw的用法</a>
</span>
<span>
<a href="https://www.youkuaiyun.com/gather_19/NtzaYg2sLWRvd25sb2Fk.html" target="_blank">
c# 判断域名端口</a>
</span>
<span>
<a href="https://www.youkuaiyun.com/gather_2f/NtzaYg3sLWJsb2cO0O0O.html" target="_blank">
c#前景怎么样</a>
</span>
<span>
<a href="https://www.youkuaiyun.com/gather_13/NtzaYg4sLWRvd25sb2Fk.html" target="_blank">
c#遍历datelist</a>
</span>
<span>
<a href="https://www.youkuaiyun.com/gather_12/NtzaYg5sLWRvd25sb2Fk.html" target="_blank">
c#如何改变控件字体</a>
</span>
<span>
<a href="https://www.youkuaiyun.com/gather_14/NtzacgwsLWRvd25sb2Fk.html" target="_blank">
c#网络编程 vs</a>
</span>
<span>
<a href="https://www.youkuaiyun.com/gather_1b/NtzacgxsLWRvd25sb2Fk.html" target="_blank">
c# 文件读取image</a>
</span>
</div>
</div>
</div>
<div class="recommend-loading-box">
<img src="https://csdnimg.cn/release/phoenix/images/feedLoading.gif">
</div>
<div class="recommend-end-box">
<p class="text-center">没有更多推荐了,<a href="https://blog.youkuaiyun.com/" class="c-blue c-blue-hover c-blue-focus">返回首页</a></p>
</div>
</div>
</main>