Update 更新操作

收藏712

阅读5052

更新时间2025-08-21

修改现有函数

Tom 执行克隆操作并找到一个新文件 string.c。 他想知道是谁将此文件添加到存储库中以及出于什么目的,所以他执行了 git log 命令。

[tom@CentOS ~]$ git clone gituser@git.server.com:project.git

上面的命令会产生下面的结果 −

Initialized empty Git repository in /home/tom/project/.git/
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 726 bytes, done.
remote: Total 6 (delta 0), reused 0 (delta 0)

克隆操作将在当前工作目录中创建一个新目录。 他将目录更改为新创建的目录并执行 git log 命令。

[tom@CentOS ~]$ cd project/

[tom@CentOS project]$ git log

上面的命令会产生下面的结果 −

commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse 
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t

commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat 
Date: Wed Sep 11 07:32:56 2013 +0530

Initial commit

观察日志后发现,string.c 文件是 Jerry 添加的,用于实现基本的字符串操作。 他对 Jerry 的代码很好奇。 所以他在文本编辑器中打开 string.c 并立即发现一个错误。 在 my_strlen 函数中,Jerry 没有使用常量指针。 因此,他决定修改 Jerry 的代码。 修改后代码如下 −

[tom@CentOS project]$ git diff

上面的命令会产生下面的结果 −

diff --git a/string.c b/string.c
index 7da2992..32489eb 100644
--- a/string.c
+++ b/string.c
@@ -1,8 +1,8 @@
#include 
-size_t my_strlen(char *s)
+size_t my_strlen(const char *s)
{
   - char *p = s;
   + const char *p = s;
   while (*p)
   ++p;
}

测试后,他提交更改。

[tom@CentOS project]$ git status -s
M string.c
?? string

[tom@CentOS project]$ git add string.c

[tom@CentOS project]$ git commit -m 'Changed char pointer to const char pointer'
[master cea2c00] Changed char pointer to const char pointer
1 files changed, 2 insertions(+), 2 deletions(-)

[tom@CentOS project]$ git log

上面的命令会产生下面的结果 −

commit cea2c000f53ba99508c5959e3e12fff493b
Author: Tom Cat 
Date: Wed Sep 11 08:32:07 2013 +0530

Changed char pointer to const char pointer

commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse 
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t

commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat 
Date: Wed Sep 11 07:32:56 2013 +0530
Initial commit

Tom 使用 git push 命令推送他的更改。

[tom@CentOS project]$ git push origin master

上面的命令会产生下面的结果 −

Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 336 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To gituser@git.server.com:project.git
d1e19d3..cea2c00 master −> master

添加新函数

与此同时,Jerry 决定实现 字符串比较 功能。 所以他修改了string.c。 修改后文件如下 −

[jerry@CentOS project]$ git diff

上面的命令会产生下面的结果 −

index 7da2992..bc864ed 100644
--- a/string.c
+++ b/string.c
30Git Tutorials
@@ -9,9 +9,20 @@ size_t my_strlen(char *s)
return (p -s );
}
+char *my_strcpy(char *t, char *s)
+
{
   +
   char *p = t;
   +
   + while (*t++ = *s++)
   + ;
   +
   +
   return p;
   +
}
+
int main(void)
{
   int i; 
   +
   char p1[32];
   char *s[] = 
   {
      "Git tutorials",
      "Tutorials Point"
      @@ -20,5 +31,7 @@ int main(void)
      for (i = 0; i < 2; ++i)
      printf("string lenght of %s = %lu\n", s[i], my_strlen(s[i]));
      +
      printf("%s\n", my_strcpy(p1, "Hello, World !!!"));
      +
      return 0;
   }
}

测试后,他准备好推动他的改变。

[jerry@CentOS project]$ git status -s
M string.c
?? string

[jerry@CentOS project]$ git add string.c

[jerry@CentOS project]$ git commit -m "Added my_strcpy function"
[master e944e5a] Added my_strcpy function
1 files changed, 13 insertions(+), 0 deletions(-)

在push操作之前,他通过查看日志消息来验证commit。

[jerry@CentOS project]$ git log

上面的命令会产生下面的结果 −

commit e944e5aab74b26e7447d3281b225309e4e59efcd
Author: Jerry Mouse 
Date: Wed Sep 11 08:41:42 2013 +0530

Added my_strcpy function

commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse 
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t

commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat 
Date: Wed Sep 11 07:32:56 2013 +0530

Initial commit

Jerry 对这些变化很满意,他想推动他的变化。

[jerry@CentOS project]$ git push origin master

上面的命令会产生下面的结果 −

To gituser@git.server.com:project.git
! [rejected]
master −> master (non-fast-forward)
error: failed to push some refs to 'gituser@git.server.com:project.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the 'Note about
fast-forwards' section of 'git push --help' for details.

但 Git 不允许 Jerry 推动他的更改。 因为 Git 发现远程仓库和 Jerry 的本地仓库不同步。 因此,他可能会失去该项目的历史。 为了避免这种混乱,Git 失败了这个操作。 现在,Jerry 必须先更新本地存储库,然后才能推送自己的更改。


获取最新更改

Jerry 执行 git pull 命令将他的本地仓库与远程仓库同步。

[jerry@CentOS project]$ git pull

上面的命令会产生下面的结果 −

remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From git.server.com:project
d1e19d3..cea2c00 master −> origin/master
First, rewinding head to replay your work on top of it...
Applying: Added my_strcpy function

拉取操作后,Jerry 检查日志消息并找到 Tom 提交的详细信息,提交 ID cea2c000f53ba99508c5959e3e12fff493ba6f69

[jerry@CentOS project]$ git log

上面的命令会产生下面的结果 −

commit e86f0621c2a3f68190bba633a9fe6c57c94f8e4f
Author: Jerry Mouse 
Date: Wed Sep 11 08:41:42 2013 +0530

Added my_strcpy function

commit cea2c000f53ba99508c5959e3e12fff493ba6f69
Author: Tom Cat 
Date: Wed Sep 11 08:32:07 2013 +0530

Changed char pointer to const char pointer

commit d1e19d316224cddc437e3ed34ec3c931ad803958
Author: Jerry Mouse 
Date: Wed Sep 11 08:05:26 2013 +0530

Changed return type of my_strlen to size_t

commit 19ae20683fc460db7d127cf201a1429523b0e319
Author: Tom Cat 
Date: Wed Sep 11 07:32:56 2013 +0530
Initial commit

现在,Jerry 的本地存储库与远程存储库完全同步。 这样他就可以安全地推动他的更改。

[jerry@CentOS project]$ git push origin master

上面的命令会产生下面的结果 −

Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 455 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To gituser@git.server.com:project.git
cea2c00..e86f062 master −> master

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号