ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用Git进行版本控制

2022-03-01 11:34:06  阅读:161  来源: 互联网

标签:文件 Git 版本控制 practice git master 提交 使用


摘自:Python编程 从入门到实践(第2版)附录D
Ubuntu 20.04

1. 安装Git

$ sudo apt install git

2. 配置Git

Git跟踪是谁修改了项目,需要知道用户名和电子邮件。

$ git config --global user.name "username"
$ git config --global user.email "username@example.com"

3. 忽略文件

创建一个git_practice文件夹作为项目目录,并创建hello_git.py文件。
有些文件无须让Git跟踪它们,如.pyc存储在目录__pycache__中。为让Git忽略这个目录,创建一个名为.gitignore的特殊文件,并在其中添加下面一行内容:

__pycache__/

4. 初始化仓库

git_practice$ git init
已初始化空的 Git 仓库于 git_practice/.git/

仓库是程序中被Git主动跟踪的一组文件。Git用来管理仓库的文件都存储在隐藏的目录.git中,你不需要与这个目录打交道。

5. 检查状态

执行其他操作前,先看一下项目的状态:

git_practice$ git status
位于分支 master

尚无提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
	.gitignore
	hello_git.py

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
git_practice$

在Git中,分支是项目的一个版本。提交是项目在特定时间的快照。
Git指出项目中未被跟踪的文件,因为我们还没有告诉它要跟踪哪些文件。接下来,Git告诉我们尚未将任何东西添加到当前提交中,但指出可能需要加入仓库中的未跟踪文件。

6. 将文件加入仓库中

将这两个文件加入仓库中,并再次检查状态:

git_practice$ git add .
git_practice$ git status 
位于分支 master

尚无提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)
	新文件:   .gitignore
	新文件:   hello_git.py

git_practice$ 

命令git add .将项目中未被跟踪的所有文件都加入仓库中。它不提交这些文件,只是让Git开始关注它们。现在检查项目状态时,我们发现Git找出了需要提交的一些修改。标签new file意味着这些文件是新添加到仓库中的。

7. 执行提交

执行第一次提交:

git_practice$ git commit -m "Started project."
[master (根提交) 4588708] Started project.
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore
 create mode 100644 hello_git.py
git_practice$ git status 
位于分支 master
无文件要提交,干净的工作区
git_practice$ 

执行命令 git commit -m "message"拍摄项目的快照。标志-m让Git将接下来的消息("Started project.")记录到项目的历史记录中。输出表明位于分支master上,且有两个文件被修改了。
现在检查状态时,会发现我们位于分支master上,且工作树是干净的。这是你每次提交项目的可行状态时都希望看到的消息。如果显示的消息不是这样的,请仔细阅读,很可能是你在提交前忘记了添加文件。

8. 查看提交历史

Git记录所有的项目提交。

git_practice$ git log
commit 45887084157ddb1585e8ff8f516793dc5e2d92c7 (HEAD -> master)
Author: user <user@163.com>
Date:   Tue Mar 1 10:19:56 2022 +0800

    Started project.
git_practice$ 

每次提交时,Git都会生成唯一的引用ID,长40字符。它记录提交是谁执行的、提交的时间以及提交时指定的消息。并非在任何情况下都需要所有这些消息,Git提供一个选项,让打印提交历史条目更简单:

git_practice$ git log --pretty=oneline
45887084157ddb1585e8ff8f516793dc5e2d92c7 (HEAD -> master) Started project.
git_practice$ 

标志--pretty=oneline指定显示两项最重要的信息:提交的引用ID和为提交记录的消息。

9. 第二次提交

需要修改项目并提交所做的修改。为此,在hello_git.py中添加一行代码:

print("Hello Git world!")

如果现在查看项目的状态,将发现Git注意到这个文件发生了变化:

git_practice$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     hello_git.py

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
git_practice$ 

输出指定了当前所在的分支和被修改了的文件的名称,还指出了所作的修改未提交。下面提交所做的修改,并再次查看状态:

git_practice$ git commit -am "Extended hello Git."
[master 0a0faea] Extended hello Git.
 1 file changed, 1 insertion(+)
git_practice$ git status
位于分支 master
无文件要提交,干净的工作区
git_practice$ git log --pretty=oneline
0a0faeac34f19c8de29e2e5ed68c9d44527d99f2 (HEAD -> master) Extended hello Git.
45887084157ddb1585e8ff8f516793dc5e2d92c7 Started project.
git_practice$ 

标志-a让Git将仓库中所有修改了的文件都加入到当前提交中。(如果在两次提交之间创建了新文件,可再次执行命令git add .,将这些新文件加入仓库中。)标志-m让Git在提交历史中记录一条消息。
查看项目的状体时,我们发现状态树也是干净的。最后,可以看到提交历史中包含两个提交。

10. 撤销修改

如何放弃所做的修改,恢复到前一个可行状态。为此,首先在hello_git.py中再添加一行代码:

print("Hello Git world!")

print("Oh no, I broke the project!")

我们查看状态,发现Git注意到了所做的修改:

git_practice$ git status
位于分支 master
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     hello_git.py

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
git_practice$ 

如果愿意,可提交所做的修改,但这次我们不提交所做的修改,而是恢复到最后一个提交(我们知道,那次提交时项目能够正常地运行)。为此,不对hello_git.py执行任何操作,而是在终端会话中执行如下命令:

git_practice$ git checkout .
从索引区更新了 1 个路径
git_practice$ git status 
位于分支 master
无文件要提交,干净的工作区

命令git checkout让你能够恢复到以前的任意提交。命令git checkout .放弃最后一次提交后所做的所有修改,将项目恢复到最后一次提交的状态。
如果此时返回文本编辑器,将发现hello_git.py被修改成这样:

print("Hello Git world!")

11. 检出以前的提交

你可以检出提交历史中的任何提交,而不仅仅时最后一次提交,为此可以在命令git checkout末尾指定该提交引用ID的前6字符(而不是句点)。通过检出以前的提交,你可以对其进行审核,然后返回到最后一次提交,或者放弃最近所做的工作并选择以前的提交:

git_practice$ git log --pretty=oneline
0a0faeac34f19c8de29e2e5ed68c9d44527d99f2 (HEAD -> master) Extended hello Git.
45887084157ddb1585e8ff8f516793dc5e2d92c7 Started project.
git_practice$ git checkout 0a0fae
注意:正在切换到 '0a0fae'。

您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以在切换
回一个分支时,丢弃在此状态下所做的提交而不对分支造成影响。

如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在 switch 命令
中添加参数 -c 来实现(现在或稍后)。例如:

  git switch -c <新分支名>

或者撤销此操作:

  git switch -

通过将配置变量 advice.detachedHead 设置为 false 来关闭此建议

HEAD 目前位于 0a0faea Extended hello Git.
git_practice$ 

检出以前的提交后,将离开分支master,进入Git所说的分离头指针(detached HEAD)状态。HEAD指针表示当前提交的项目状态,之所以说处于分离状态,是因为我们离开了一个命名分支(这里时master)。
要回到分支master,可检出它:

git_practice$ git checkout master 
切换到分支 'master'
git_practice$ 

这让你回到分支master。除非要使用Git的高级功能,否则在检出以前的提交后,最好不要对项目做任何修改。然而,如果参与项目开发的人只有你自己,而你又想放弃较近的所有提交并恢复到以前的状态,也可将项目重置到以前的提交。为此,可在处于分支master上的情况下,执行如下命令:

git_practice$ git status
位于分支 master
无文件要提交,干净的工作区
git_practice$ git log --pretty=oneline
0a0faeac34f19c8de29e2e5ed68c9d44527d99f2 (HEAD -> master) Extended hello Git.
45887084157ddb1585e8ff8f516793dc5e2d92c7 Started project.
git_practice$ git reset --hard 458870
HEAD 现在位于 4588708 Started project.
git_practice$ git status
位于分支 master
无文件要提交,干净的工作区
git_practice$ git log --pretty=oneline
45887084157ddb1585e8ff8f516793dc5e2d92c7 (HEAD -> master) Started project.
git_practice$ 

首先查看状态,确认位于分支master上。查看提交历史时,我们看到了两个提交。接下来,执行命令git reset --hard,并在其中指定要永久恢复到的提交的引用ID前6字符。我们再次查看状态,发现位于分支master上,且没有需要提交的修改。再次查看提交历史时,会发现我们回到了要重新开始的提交。

12. 删除仓库

有时候,仓库的历史记录被你弄乱了,而你有不知道如何恢复。如果无法恢复且参与项目开发的只有你一人,可继续使用这些文件,但要将项目的历史记录删除——删除目录.git。这不会影响任何文件的当前状态,只会删除所有的提交,因此你将无法检出项目的其他任何状态。
为此,可打开一个文件浏览器,并将目录.git删除,也可以通过命令行将其删除。这样做后,需要重新创建一个仓库,重新对修改进行跟踪。下面演示了如何在终端会话中完成这个过程:

git_practice$ git status
位于分支 master
无文件要提交,干净的工作区
git_practice$ rm -rf .git
git_practice$ git status
fatal: 不是 git 仓库(或者任何父目录):.git
git_practice$ git init
已初始化空的 Git 仓库于 git_practice/.git/
git_practice$ git status
位于分支 master

尚无提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
	.gitignore
	hello_git.py

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
git_practice$ git add .
git_practice$ git commit -m "Starting over."
[master (根提交) ec75766] Starting over.
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore
 create mode 100644 hello_git.py
git_practice$ git status
位于分支 master
无文件要提交,干净的工作区
git_practice$ 

标签:文件,Git,版本控制,practice,git,master,提交,使用
来源: https://www.cnblogs.com/liml-miku/p/15948798.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有