重庆网站建设首选卓光优化国内访问wordpress
news/
2025/10/6 15:38:36/
文章来源:
重庆网站建设首选卓光,优化国内访问wordpress,企业产品推广网站,曲靖住房和城乡建设局网站文章目录 1.Git介绍2.安装配置2.1 查看配置信息 3.文件管理3.1 创建仓库3.2 版本回退3.3 工作流程3.4 撤销修改3.5 删除文件 4.远程仓库4.1 连接远程库4.2 本地上传至远程4.3 从远程库克隆到本地 5.分支管理5.1 创建分支5.2 删除分支5.3 合并分支解决冲突 参考#xff1a; Git… 文章目录 1.Git介绍2.安装配置2.1 查看配置信息 3.文件管理3.1 创建仓库3.2 版本回退3.3 工作流程3.4 撤销修改3.5 删除文件 4.远程仓库4.1 连接远程库4.2 本地上传至远程4.3 从远程库克隆到本地 5.分支管理5.1 创建分支5.2 删除分支5.3 合并分支解决冲突 参考 Git教程|菜鸟网络 Git教程—廖雪峰 1.Git介绍
版本控制系统
Git 是一个开源的分布式版本控制系统能敏捷高效地处理任何或小或大的项目通常用于团队开发项目过程中对源码协同编辑和管理。Git 是 Linus Torvalds 在2005年为了帮助管理 Linux 内核开发基于C开发的一个开源版本控制软件方便其它内核开发者提交贡献和修改。什么是版本控制系统比如用word写论文每次修改重新保存另一个文件最后会出现很多版本如果导师再修改还需要来回发送文件合并新内容这样会很麻烦。Git可以自动记录每次文件的改动支持对文件的协同编辑就不需要手动管理多个“版本”。
分布式控制
其它版本控制工具 CVS, Subversion 均为集中式版本控制系统版本库是集中存放在中央服务器的个人从服务器中取得最新版本修改结束后推送回中央服务器类比图书馆集中式版本控制系统需要连接网络才能工作。分布式版本控制系统没有“中央服务器”每个人的电脑上都是一个完整的版本库因此也不需要连接网络安全性也很高。目前还有很多其它的版本控制系统比如CVS, SVN, ClearCase等Git是最流行的。
2.安装配置
Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行可在git-scm官网上下载。以windows系统为例gitforwindows镜像下载安装后包括图形界面Git GUI和Git Bash 2.1 查看配置信息
git config --list
配置你的服务器的信息git是分布式版本控制系统因此每台机器需要设置用户名和邮件使用global表明这台机器上的所有Git仓库都使用这个配置信息也可以对某个仓库指定不同的用户名和邮件
$ git config --global user.name name
$ git config --global user.email email# 查看config
$ git config --list3.文件管理
3.1 创建仓库
git init初始化目录git add添加文件git commit提交文件
版本库也成为仓库repository相当于一个目录这个目录里的所有文件都有能用Git管理每个文件的修改历史都可以被追踪或还原。首先创建一个空目录mkdir进入该文件cdpwd显示当前目录通过git init将这个目录变成Git可以管理的仓库目录下会增加一个.git目录用于Git跟踪管理版本库。如果没看到可能是隐藏了用ls -ah可以看见
$ mkdir Desktop/learngit
$ cd Desktop/learngit
$ pwd
/c/Users/pengy/Desktop/learngit$ git init
Initialized empty Git repository in C:/Users/pengy/Desktop/learngit/.git/$ ls -ah
./ ../ .git/接着在learngit里面建立一个readme.txt文件直接新建文件然后通过git add和git commit将该文件提交到仓库。add告诉Git将文件添加到仓库可以反复使用添加多个文件commit将文件提交到仓库-m是本次提交的说明。执行成功后会显示 1 file changed一个文件被改动2 insertions()插入了两行内容readme.txt里的两行内容。设置add和commit两步是因为commit可以一次性提交多个很多文件可以多次使用add添加文件。
$ git add readme.txt
$ git commit -m wrote a readme file
[master (root-commit) 643a68e] wrote a readme file1 file changed, 2 insertions()create mode 100644 readme.txtgo go go
run everyday3.2 版本回退
git status掌握仓库当前的状态git diff查看修改的内容git log查看从最近到最远的提交日志git reset回退到某个指定的版本git reflog查看命令历史以便确定要回到未来的哪个版本
修改readme.txt文件的内容改成如下内容用git status命令查看结果
go go go
sleep everyday$ 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: readme.txtno changes added to commit (use git add and/or git commit -a)git status可以让我们时刻掌握仓库当前的状态上面结果表明readme.txt被修改过了但是还没有提交修改。如果想要查看具体修改的内容用git diff命令可以看出将run修改为了sleep
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 9fbbc68..ab0fdda 100644
--- a/readme.txtb/readme.txt-1,2 1,2 go go go
-run everyday
\ No newline at end of file
sleep everyday
\ No newline at end of file接着用前面提到的方法提交修改
$ git add readme.txt
$ git status
On branch master
Changes to be committed:(use git restore --staged file... to unstage)modified: readme.txt$ git commit -m change sleep
[master 3149571] change sleep1 file changed, 1 insertion(), 1 deletion(-)$ git status
On branch master
nothing to commit, working tree clean提交后显示没有需要提交的修改工作目录working tree是干净。 按照前面的修改方法再修改文件如下
go go go
sleep everyday
young and rich$ git add readme.txt
$ git commit -m append line
[master 0efc261] append line1 file changed, 2 insertions(), 1 deletion(-)这样对文件不停的修改每次修改提交都会保留一个当前内容方面后续恢复如同备份目前readme.txt已经修改了三次
go go go
run everydaygo go go
sleep everydaygo go go
sleep everyday
young and rich用git log查看从最近到最远的提交日志
$ git log
commit 0efc2612b8fbf89a036e4358c4a0c83f9afddffc (HEAD - master)
Author: bujibujibiu 123456gmail.com
Date: Wed May 24 14:37:07 2023 0800append linecommit 3149571d74bc882218458f638eb119dae24e1a57
Author: bujibujibiu 123456gmail.com
Date: Wed May 24 14:26:39 2023 0800change sleepcommit 643a68e9294e906037cb37d3c120dac6f02a2127
Author: bujibujibiu carrot12358gmail.com
Date: Wed May 24 11:31:55 2023 0800wrote a readme file在图形化Git Gui中可以清楚看到提交历史 Git中Head表示当前版本append lineHEAD^表示上一个HEAD~100表示上100个用git reset回退到上一个版本change sleep查看当前文件内容变成了第二个版本
$ git reset --hard HEAD^
HEAD is now at 3149571 change sleep$ cat readme.txt
go go go
sleep everyday再次git log会发现只有两条记录
$ git log
commit 3149571d74bc882218458f638eb119dae24e1a57 (HEAD - master)
Author: bujibujibiu carrot12358gmail.com
Date: Wed May 24 14:26:39 2023 0800change sleepcommit 643a68e9294e906037cb37d3c120dac6f02a2127
Author: bujibujibiu carrot12358gmail.com
Date: Wed May 24 11:31:55 2023 0800wrote a readme file如果想要回到最新的那个版本就找到commit id版本号写前几位Git会自动寻找对应的版本可以发现又回到最新的版本
$ git reset --hard 0efc
HEAD is now at 0efc261 append line$ cat readme.txt
go go go
sleep everyday
young and rich为了找到版本号可以用git reflog记录每一次的命令
$ git reflog
0efc261 (HEAD - master) HEAD{0}: reset: moving to 0efc
3149571 HEAD{1}: reset: moving to HEAD^
0efc261 (HEAD - master) HEAD{2}: commit: append line
3149571 HEAD{3}: commit: change sleep
643a68e HEAD{4}: commit (initial): wrote a readme file3.3 工作流程
工作区—暂存区—版本库分支
在前文中提到过提交修改文件需要通过add和commit两步流程如下工作区是电脑里能看到的目录版本库Repository是文件夹里的隐藏目录.git不算工作区Git版本库中包含一个暂存区(index/stage)还有Git自动创建的第一个分支master以及指向master的一个指针叫HEAD。git add将文件修改添加到暂存区git commit把暂存区的所有内容提交到当前分支master。 比如在readme.txt里增加一行内容同时新建文件LICENSE.txtgit status表明修改了一个文件新增了一个文件为Untracked files。然后git add这两个文件LICENSE.txt和readme.txt被放到了暂存区git commit将两个文件提交到master分支
$ 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: readme.txtUntracked files:(use git add file... to include in what will be committed)LICENSE.txtno changes added to commit (use git add and/or git commit -a)$ git add readme.txt
$ git add LICENSE.txt
$ git status
On branch master
Changes to be committed:(use git restore --staged file... to unstage)new file: LICENSE.txtmodified: readme.txt$ git commit -m stage works
[master 2312846] stage works2 files changed, 2 insertions(), 1 deletion(-)create mode 100644 LICENSE.txt
$ git status
On branch master
nothing to commit, working tree cleanGit管理的是每一次修改比如按照下面操作修改readme.txt—add—修改readme.txt—commit—statuscommit提交的只是第一次修改的内容add将第一次修改放在暂存区可见Git管理的是每一次修改而不是文件本身。
# 1修改readme.txt新增track changes
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes# 2readme.txt存放在暂存区
$ git add readme.txt# 3再次修改readme.txt变成track changes second
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second# 4提交暂存区里的readme.txt
$ git commit -m track changes
[master bd56840] track changes1 file changed, 2 insertions(), 1 deletion(-)# 5显示当前状态第二次修改的readme.txt没有被提交
$ 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: readme.txtno changes added to commit (use git add and/or git commit -a)用git diff HEAD -- readme.txt可以看到工作区和版本库里的readme.txt区别
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index a8981d7..a7d5c05 100644
--- a/readme.txtb/readme.txt-2,4 2,4 go go gosleep everydayyoung and richcrzay life
-track changes
\ No newline at end of file
track changes second
\ No newline at end of file3.4 撤销修改
git checkout -- file撤销file工作区的修改git reset HEAD file撤销暂存区的修改
如果要撤销对工作区的修改使用git checkout -- file
# 1readme.txt文件新增stupid day
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope
stupid day# 2删除工作区的修改
$ git checkout -- readme.txt#3stupid day已经删除
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope如果已经add到暂存区使用git reset命令把暂存区的修改回退到工作区再用checkout丢弃工作区的修改
# 1修改readme.txt新增stupid day
$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope
stupid day# 2add到暂存区状态为待提交
$ git add readme.txt
$ git status
On branch master
Changes to be committed:(use git restore --staged file... to unstage)modified: readme.txt# 3把暂存区的修改回退到工作区状态为待add
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt$ 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: readme.txtno changes added to commit (use git add and/or git commit -a)# 4checkout撤销工作区的修改
$ git checkout -- readme.txt$ cat readme.txt
go go go
sleep everyday
young and rich
crzay life
track changes second
no hope已经提交了不合适的修改到版本库时想要撤销本次提交可使用前面的版本回退不过前提是没有推送到远程库
3.5 删除文件
git rm删除文件git checkout -- file恢复工作区file文件
假设新增一个文件并提交到了版本库现在需要删除这个文件首先用rm删除工作区中的文件然后用使用git rm删除版本库中文件
# 1新增文件test.txt并add和commit到版本库
$ git add test.txt
$ git commit -m add test.txt
[master 33f52c0] add test.txt1 file changed, 1 insertion()create mode 100644 test.txt# 2使用rm命令直接删除工作区的test.txt
$ rm test.txt
$ git status
On branch master
Changes not staged for commit:(use git add/rm file... to update what will be committed)(use git restore file... to discard changes in working directory)deleted: test.txtno changes added to commit (use git add and/or git commit -a)# 3使用git rm删除版本库中的test.txt并commit
$ git rm test.txt
rm test.txt
$ git commit -m delete test.txt
[master 2e755a3] delete test.txt1 file changed, 1 deletion(-)delete mode 100644 test.txt如果用rm删除了工作区中的某个文件但是发现删错了可以通过checkout用版本库里的版本替换工作区的版本无论工作区是修改还是删除都可以“一键还原”
# 1新增文件test.txt并add和commit到版本库
$ git add test.txt
$ git commit -m add test new
[master 943447f] add test new1 file changed, 1 insertion()create mode 100644 test.txt# 2使用rm命令直接删除工作区的test.txt
$ cat test.txt
for test
$ rm test.txt
$ cat test.txt
cat: test.txt: No such file or directory# 3checkout 恢复工作区的文件
$ git checkout -- test.txt
$ cat test.txt
for test4.远程仓库
4.1 连接远程库
Git是一种分布式版本控制工具用于管理多版本项目。Github和Gitlab都是基于git的代码托管平台Github一般用于托管开源项目GitLab比较私密适合企业。本地仓库可以和远程仓库之间传输需要SSH加密。以github为例。首先在本地Git配置config信息在Github上用该邮件注册账号。
$ git config --global user.name name
$ git config --global user.email email先通过cd ~/.ssh查看是否已经配置SSH如果没有任何文件则输入一下内容配置SSH一直回车密码可以不设置
$ ssh-keygen -t -rsa -C HAPPYHAPPY.com
Generating public/private rsa key pair.重新打开.ssh目录id_rsa是私钥不能泄露出去id_rsa.pub是公钥可以公开将id_rsa.pub内容复制到Github的SSH key设置中
$ cd ~/.ssh
$ ls
id_rsa id_rsa.pub
$ cat id_rsa.pub判断是否连接成功输入下面语句显示You’ve successfully authenticated, but GitHub does not provide shell access
$ ssh gitgithub.com4.2 本地上传至远程
git remote add origin *********.git连接远程仓库git push将本地分支的内容推送到远程库git remote -v查看远程仓库信息git remote rm name删除远程仓库
如果通过前面的3.1创建本地仓库后想要在GIthub或者Gitlab中也创建一个Git仓库并且两个仓库远程同步首先在GIthub中Create repository创建一个空的Git仓库然后把本地仓库的内容推送到GitHub仓库在本地的仓库下运行命令
$ git remote add origin *********.git*********就是你的远程仓库地址添加后远程库的名字就是origin这是Git默认的叫法。用git remote -v可以查看远程库信息
pengyLAPTOP-7A77J86V MINGW32 ~/Desktop/CPCS (master)
$ git remote -v
origin https://github.com/bujibujibiu/learngit.git (fetch)
origin https://github.com/bujibujibiu/learngit.git (push)如果添加的时候地址写错了或者就是想删除远程库可以用git remote rm name命令
$ git remote rm origin把本地库的所有内容推送到远程库上用git push这样matser分支的内容就推送到Github中以后每次修改都可以通过这个命令更新远程仓库
$ git push origin master如果是远程库和本地库都初始化了现在需要同步那么首先要将远程库pull到本地然后push。
$ git pull origin master出现fatal: refusing to merge unrelated histories错误就用下面方法强制合并
pengyLAPTOP-7A77J86V MINGW32 ~/Desktop/learngit(master)
$ git pull origin master --allow-unrelated-histories
From https://github.com/bujibujibiu/learngit* branch master - FETCH_HEAD
Merge made by the ort strategy.README.md | 3 1 file changed, 3 insertions()create mode 100644 README.mdpengyLAPTOP-7A77J86V MINGW32 ~/Desktop/learngit(master)
$ git push origin master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 12 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 95.42 KiB | 13.63 MiB/s, done.
Total 8 (delta 1), reused 0 (delta 0), pack-reused 0
To https://github.com/bujibujibiu/learngit.git7ec29b2..fb58fc0 master - master
4.3 从远程库克隆到本地
git clone *****克隆远程库至本地文件
4.2是先有本地仓库后有远程仓库如何关联远程库假设现在先有远程仓需要克隆到本地。比如首先创建Github仓库勾选Initialize this repository with a README这样GitHub会自动为创建一个README.md文件。下一步是用命令git clone克隆一个本地库。
$ git clone https://github.com/bujibujibiu/learngit.git这样本地就会出现一个learngit的库并且有README.md文件
5.分支管理
5.1 创建分支
git branch查看分支git branch name新建分支git checkout (branchname)切换分支命令git checkout -b (branchname) 创建新分支并立即切换到该分支
Git管理修改是将这些提交串成时间线也就是一个分支在Git初始化时自动创建了一个分支master当前版本HEAD指向mastermaster指向最新的提交点。每次提交master分支都会向前移动一步随着不断提交master分支的线也越来越长。如果创建新的分支比如dev指向master相同的提交再把HEAD指向dev就表示当前分支在dev上。从现在开始对工作区的修改和提交就是针对dev分支了比如新提交一次后dev指针往前移动一步而master指针不变。 如下创建文件夹learngit通过3.1的操作新建仓库并添加readme.txt文件
$ cd learngit
$ git init
Initialized empty Git repository in C:/Users/pengy/Desktop/learngit/.git/$ git status
On branch masterNo commits yetUntracked files:(use git add file... to include in what will be committed)readme.txtnothing added to commit but untracked files present (use git add to track)$ git add .$ git commit -m create readme file
[master (root-commit) dd8bad0] create readme file1 file changed, 6 insertions()create mode 100644 readme.txt$ git status
On branch master
nothing to commit, working tree clean$ git branch
* master然后新建分支test切换到test分支
~/Desktop/learngit (master)
$ git branch test~/Desktop/learngit (master)
$ git branch
* mastertest~/Desktop/learngit (master)
$ git checkot test
git: checkot is not a git command. See git --help.The most similar command ischeckout~/Desktop/learngit (master)
$ git checkout test
Switched to branch test在test分支下新增文件夹test.txtls发现在test分支下有两个文件readme.txt和test.txt再切回到master分支只剩下readme.txt文件
~/Desktop/learngit (test)
$ ls
readme.txt~/Desktop/learngit (test)
$ echo runoob.com test.txt~/Desktop/learngit (test)
$ ls
readme.txt test.txt~/Desktop/learngit (test)
$ git add .
warning: in the working copy of test.txt, LF will be replaced by CRLF the next time Git touches it~/Desktop/learngit (test)
$ git commit -m add test file
[test d20d68d] add test file1 file changed, 1 insertion()create mode 100644 test.txt~/Desktop/learngit (test)
$ ls
readme.txt test.txt~/Desktop/learngit (test)
$ git checkout master
Switched to branch master~/Desktop/learngit (master)
$ ls
readme.txt使用git checkout -b (branchname) 新建分支newtest并切换到该分支文件和master一样
~/Desktop/learngit (master)
$ git checkout -b newtest
Switched to a new branch newtest~/Desktop/learngit (newtest)
$ ls
readme.txt5.2 删除分支
git branch -d (branchname)删除分支
使用git branch -d (branchname)删除前面新建的newtest分支注意要切换到别的分支不能删除当前所在分支
~/Desktop/learngit (newtest)
$ git branchmaster
* newtesttest~/Desktop/learngit (newtest)
$ git branch -d newtest
error: Cannot delete branch newtest checked out at C:/Users/pengy/Desktop/learngit~/Desktop/learngit (newtest)
$ git checkout master
Switched to branch master~/Desktop/learngit (master)
$ git branch -d newtest
Deleted branch newtest (was dd8bad0).~/Desktop/learngit (master)
$ git branch* mastertest5.3 合并分支解决冲突
git merge (branchname)将任何分支合并到当前分支中可以不是主分支
在master分支中新建文件runoob.php并且commit这样master分支中有两个文件readme.txt和runoob.phptest分支中有两个文件readme.txt和test.txt
~/Desktop/learngit (master)
$ git branch
* mastertest~/Desktop/learngit (master)
$ touch runoob.php~/Desktop/learngit (master)
$ git add .~/Desktop/learngit (master)
$ git commit -m add runoob file
[master 3dcca8c] add runoob file1 file changed, 0 insertions(), 0 deletions(-)create mode 100644 runoob.php~/Desktop/learngit (master)
$ ls
readme.txt runoob.php~/Desktop/learngit (master)
$ git checkout test
Switched to branch test~/Desktop/learngit (test)
$ ls
readme.txt test.txt合并test分支到master分支中假设两个分支下都有test.txt文件且不一样合并会产生冲突
pengyLAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (test)
$ cat test.txt
runoob.com
study
new
amazing
HAPPYpengyLAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master)
$ cat test.txt
runoob.com
study
new
new againpengyLAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master)
$ git merge test
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
打开test.txt会看到冲突内容
pengyLAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master|MERGING)
$ cat test.txt
runoob.com
study
newHEAD
new againamazing
HAPPYtestGit通常会在进行合并操作时生成MERGE_MSG交换文件以保存合并消息的内容。如果Git在工作目录下找到了这个交换文件说明上一次的合并操作没有成功完成编辑器的进程可能意外终止。输入rm .git/.MERGE_MSG.swp 根据提示修改master分支下的test.txt文件重新commit后显示[master 2bf0895]表示成功
$ git status
On branch master
You have unmerged paths.(fix conflicts and run git commit)(use git merge --abort to abort the merge)Unmerged paths:(use git add file... to mark resolution)both modified: test.txtno changes added to commit (use git add and/or git commit -a)pengyLAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master|MERGING)
$ git add .pengyLAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master|MERGING)
$ git commit -m merge change
[master 2bf0895] merge changepengyLAPTOP-7A77J86V MINGW32 ~/Desktop/learngit (master)
$ git status
On branch master
nothing to commit, working tree clean
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929460.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!