diff --git a/Git/1 基本操作.md b/Git/1 基本操作.md new file mode 100644 index 00000000..c8861f8b --- /dev/null +++ b/Git/1 基本操作.md @@ -0,0 +1,80 @@ +Git的本地操作 + +> 参考文献 +> * [git使用教程](https://github.com/geeeeeeeeek/git-recipes/wiki) + +## 1 git安装 + +- Linux上通过命令行能够很轻松的部署好git +- Windows上需要安装GitBash,模拟linux命令行 +- 安装完成后需要配置全局信息的命令 + +``` +git config --global user.name "Your Name" +git config --global user.email "email@example.com" +``` + +## 2 创建版本库 + +``` +git init +``` +生成.git文件,将这个目录初始化为一个版本的仓库。 + +``` +git add readme.txt +``` + +将文件添加到缓冲区,可以连续多次向缓冲区中添加东西 + +``` +git commit -m "wrote a message" +``` +将缓冲区的文件提交到历史记录当中当中,可以一次提交对缓冲区的多次修改。 + +## 3 时光穿梭机 + +``` +git status +``` + +用来查看当前仓库的状态。主要有changes not staged for +commit状态(工作区有变化没有提交),chages to be +committed状态(缓存区有变化等待提价) + +``` +git diff readme.txt +``` + +用来对比工作区和历史记录内容的差别。 + + +## 5 工作区和暂存区 + +### **概念理解** + +- 工作区Wording Directory:在电脑中能够看到的目录,是工作区 + +- 版本库Repository:工作区有一个隐藏的目录.git是版本库 + +- 版本库中有Stage暂存区和master等分支以及一个纸箱master的指针HEAD + +- git跟踪管理的是对文件的修改而并非文件本身 + +### **撤销修改** +``` +git checkout --readme.txt +``` +把readme.txt在工作区的修改全部撤销掉。如果缓存区有readme.txt的中间状态,则从缓存区恢复,如果缓存区没有readme.txt的中间状态,则从版本库中恢复。 + +``` +git reset HEAD readme.txt +``` +把readmen.txt在缓存区的修改全部撤销掉。但是依然会保留工作区的修改。 + +### **删除文件** +``` +git rm test.txt +``` + +把某个文件从缓存区删掉,然后commit之后会从版本库删掉。如果删错了可以通过checkout从缓存区恢复这个文件。 diff --git a/Git/10 标签管理.md b/Git/10 标签管理.md new file mode 100644 index 00000000..d5bda1a2 --- /dev/null +++ b/Git/10 标签管理.md @@ -0,0 +1,61 @@ + +## 10 标签管理 + +### **创建标签** + +``` +git tag v1.0 +``` + +对当前版本打标签,为v1.0 + +``` +git tag +``` +查看所有已经创建的标签 + +``` +git tag v0.9 6.225 +``` + +对指定id的版本打标签 +``` +git show v0.9 +``` + +查看标签信息 + +``` +git tag -a v0.1 -m "version 0.1 released" 3628164 +``` + +创建带有标签说明的标签 + +### **操作标签** + +``` +git tag -d v0.1 +``` + +删除制定版本的标签 + +``` +git push origin v1.0 +``` + +推送某个标签到远程 + +``` +git push origin --tags +``` + +一次性推送所有标签。 + +``` +git tag -d v0.9 + +git push origin :refs/tags/v0.9 +``` + +从远程删除标签,先在本地删除标签,然后将操作推送到远程。 + diff --git a/Git/4 版本回退.md b/Git/4 版本回退.md new file mode 100644 index 00000000..fddd5159 --- /dev/null +++ b/Git/4 版本回退.md @@ -0,0 +1,220 @@ +# 4 版本回退 + +## 1 git的工作流 + +### 提交工作流 +* 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。 +* 暂存区:已经 git add xxx 进去,且未 git commit xxx 的。 +* 本地分支:已经git commit -m xxx 提交到本地分支的。 + +![](../Git/image/2021-06-15-11-04-57.png) + +### 回滚工作流 + +在上传代码到远程仓库的时候,不免会出现问题,任何过程都有可能要回滚代码: + +git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。 +``` +git reset --hard HEAD^ +``` +即往前回退一个版本,回退完了后工作区就是上一个版本的代码了,并且是clean的。 +``` +git reset --soft HEAD^ +``` +往前回退一个版本,并且将这次错误的提交的代码改动,放在暂存区里。 +``` +git reset --mixed HEAD^(和不带参数是一样的) +``` +往前回退一个版本,并且将这次错误的提交的代码改动,放在工作区里。 + + +## 2 Git撤销&回滚操作(git reset 和 get revert) + + +### 在工作区的代码 +``` +git checkout -- a.txt # 丢弃某个文件,或者 +git checkout -- . # 丢弃全部 +``` + +* 注意:git checkout – . 丢弃全部,也包括:新增的文件会被删除、删除的文件会恢复回来、修改的文件会回去。这几个前提都说的是,回到暂存区之前的样子。对之前保存在暂存区里的代码不会有任何影响。对commit提交到本地分支的代码就更没影响了。当然,如果你之前压根都没有暂存或commit,那就是回到你上次pull下来的样子了。 + +### 代码git add到缓存区,并未commit提交 +``` +git reset HEAD . 或者 +git reset HEAD a.txt +``` + +* 这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化 + +### git commit到本地分支、但没有git push到远程 + +``` +git log # 得到你需要回退一次提交的commit id +git reset --hard # 回到其中你想要的某个版 +``` +或者 +``` +git reset --hard HEAD^ # 回到最新的一次提交 +``` +或者 +``` +git reset HEAD^ # 此时代码保留,回到 git add 之前 +``` + +### it push把修改提交到远程仓库 +1. 通过git reset是直接删除指定的commit +``` +git log # 得到你需要回退一次提交的commit id +git reset --hard +git push origin HEAD --force # 强制提交一次,之前错误的提交就从远程仓库删除 +``` +2. 通过git revert是用一次新的commit来回滚之前的commit +``` +git log # 得到你需要回退一次提交的commit id +git revert # 撤销指定的版本,撤销也会作为一次提交进行保存 +``` +3. git revert 和 git reset的区别 + + - git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留; + - git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除 + +## 3 场景 + +### 场景一: + +糟了,我刚把不想要的代码,commit到本地仓库中了,但是还没有做push操作! + +### 场景二: + +彻底完了,刚线上更新的代码出现问题了,需要还原这次提交的代码! + +### 场景三: + +刚才我发现之前的某次提交太愚蠢了,现在想要干掉它! + +## 4 操作 +### 针对场景一 + +在未进行git push前的所有操作,都是在“本地仓库”中执行的。我们暂且将“本地仓库”的代码还原操作叫做“撤销”! + +* 情况一:文件被修改了,但未执行git add操作(working tree内撤销) + +``` +git checkout fileName + +git checkout . +``` +* 情况二:同时对多个文件执行了git add操作,但本次只想提交其中一部分文件 + +``` +$ git add * + +$ git status + +# 取消暂存 + +$ git reset HEAD +``` +* 情况三:文件执行了git add操作,但想撤销对其的修改(index内回滚) + +```` +# 取消暂存 + +git reset HEAD fileName + +# 撤销修改 + +git checkout fileName +```` +* 情况四:修改的文件已被git commit,但想再次修改不再产生新的Commit + +``` +# 修改最后一次提交 + +$ git add sample.txt + +$ git commit --amend -m"说明" +``` +* 情况五:已在本地进行了多次git commit操作,现在想撤销到其中某次Commit +``` +git reset [--hard|soft|mixed|merge|keep] [commit|HEAD] +``` + + +### 针对场景二 + +已进行git push,即已推送到“远程仓库”中。我们将已被提交到“远程仓库”的代码还原操作叫做“回滚”!注意:对远程仓库做回滚操作是有风险的,需提前做好备份和通知其他团队成员! + +如果你每次更新线上,都会打tag,那恭喜你,你可以很快的处理上述场景二的情况 +``` +git checkout +``` + + +如果你回到当前HEAD指向 +``` +git checkout +``` +* 情况一:撤销指定文件到指定版本 + +``` +# 查看指定文件的历史版本 + +git log + +# 回滚到指定commitID + +git checkout +``` +* 情况二:删除最后一次远程提交 + + * 方式一:使用revert + * 方式二:使用reset + + +``` +git revert HEAD + +git push origin master +``` + +``` +git reset --hard HEAD^ + +git push origin master -f +``` +二者区别: + +revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在; +reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。 + +* 情况三:回滚某次提交 + +``` +# 找到要回滚的commitID + +git log + +git revert commitID +``` +删除某次提交 +``` +git log --oneline -n5 +``` + +Git撤销&回滚操作(git reset 和 get revert)2 +``` +git rebase -i "commit id"^ +``` +注意:需要注意最后的^号,意思是commit id的前一次提交 +``` +git rebase -i "5b3ba7a"^ +``` +Git撤销&回滚操作(git reset 和 get revert)3 + +在编辑框中删除相关commit,如pick 5b3ba7a test2,然后保存退出(如果遇到冲突需要先解决冲突)! +``` +git push origin master -f +``` +通过上述操作,如果你想对历史多个commit进行处理或者,可以选择git rebase -i,只需删除对应的记录就好。rebase还可对 commit 消息进行编辑,以及合并多个commit \ No newline at end of file diff --git a/Git/7 远程操作.md b/Git/7 远程操作.md new file mode 100644 index 00000000..7c84ae76 --- /dev/null +++ b/Git/7 远程操作.md @@ -0,0 +1,118 @@ + +## 7 Git的远程操作 + +远程操作主要是指,在不同的仓库之间进行提交和代码更改。是一个明显的对等的分布式系统。其中本地个仓库与远程仓库,不同的远程仓库之间都可以建立这种关系。这种关系之间的操作主要有pull和push。 + +### **远程仓库** + +创建SSH key远程仓库和本地仓库一般是通过ssh通信的,需要ssh通信的加密钥匙。 + +id_rsa是私钥,id_rsa.pub是公钥,可以告诉别人。 +``` +ssh-keygen -t rsa -C 'yinkanglong@163.com' +``` + +登录github,添加公钥内容。建立本地与远程仓库的通信协议 + +### **添加远程仓库** + +github的界面操作可以很轻松的创建一个远程仓库。但如果想要直接上传自己本地的完整git库,必须创建一个没有lisence和readme的空库。 + +``` +git remote add origin git@github.com:michaelliao/learngit.git +``` +将本地仓库和远程仓库进行关联。一般都叫远程关联仓库为origin,本地的主干分支一般名为master + +``` +git push -u origin master +``` + +将本地的主干分支master推送到远程的origin分支上。-u参数实现了两个分支的关联,将远程的git仓库的master和本地的master进行了分支管理,当再次执行时,只需要使用git +push origin master命令。 + +### **从远程仓库克隆** + +``` +git clone git@github.com:michaelliao/gitskills.git +``` + + +### **git remote** + +``` +git remote +``` + +列出你和远程仓库之间的远程连接 + +``` +git remote -v +``` + +列出每个连接的名字和url + +``` +git remote add +``` + +创建一个新的远程连接并添加名字 +``` +git remote rm +``` + +移除远程仓库的链接 + +### **git fetch** + +``` +git fetch +``` + +拉取仓库中的所有分支(包括相关的文件和所有的提交) +``` +git fetch +``` + +拉取制定仓库中的所有分支(包括相关的文件和所欲的提交) + +> 注意,这个步骤知识拉取远程的分支,在本地并没有合并也没有生成本地分支,知识一个可读的远程分支。 +> * 使用git branch -r 命令可以查看所有只读的远程分支。 +> * 使用gitcheckout命令可以创建本地分支,并与远程分支关联。 +> * 使用git merge命令可以将远程分支与本地分支合并。 + +### **git pull** +``` +git pull remote +``` + +拉取当前分支对应的远程副本,并将远程副本的更改写入本地副本。相当于git fetch之后git merge。 + +``` +git pull -rebase \ +``` + +使用git rebase命令合并远程分支与本地分支,不使用git merge + +### **git push** + +``` +git push \ +``` + +将制定分支推送到远程分支。包括所有的文件和提交。 + +``` +git push --force +``` +强制推送 +``` +git push --all +``` + +本地所有的分支推送到远程仓库当中 + +``` +git push --tags +``` + +将本地所有标签推送到远程仓库中 diff --git a/Git/8 分支管理.md b/Git/8 分支管理.md new file mode 100644 index 00000000..7b835483 --- /dev/null +++ b/Git/8 分支管理.md @@ -0,0 +1,110 @@ + +## 8 分支管理 + +这里主要体现的git的功能的分离,这才是真正的git吧。每一个分支都是一个单独的可以分离的工作单位。每个用户可以建立不同的分支进行工作,最终提交到同一个开发分支上。一个用户可以建立不同的分支实现不同的功能,最终提交到同一个用户分支上。分支的灵活性,可以让我们很容易的实现不同分工的分割。 + +### **创建分支** + +``` +git checkout -b dev +``` +创建分支,并且将工作目录切换到dev的工作目录上。 + +``` +git branch dev +``` +使用当前版本分支创建新的分支(即添加一个分支指针)。 +``` +git checkout dev +``` +将工作区切换到某一个分支指针所指的版本上。 +``` +git branch +``` +会列出所有的分支目录。 + +### **分支合并** + +``` +git merge dev +``` + +将dev分支合并到当前工作目录下的分支上(不一定是产生他的父分支) +``` +git branch -d dev +``` +用来删除一个已经无效的分支指正,但是在这个分支指针上左右的操作都会保留。 + +### **解决冲突** + +- 当合并过程中出现冲突,会进入长途解决工作区,手动解决后提交,就会退出。 + +- 关于一点,提交后的分支有必要继续工作吗,都行。完全可以提交后删掉重新创建一个分支,获取主干分支上集成的最新内容,然后继续工作。也可以直接在分支上合并一次主干分支,然后得到最新的内容,继续在原来的分支上进行工作。 + +``` +git log --graph +``` + +可以查看分支合并图。 + +### **分支合并方式** +``` +git merge --no-ff -m "merge messge" dev --no-ff +``` +不适用fastfoward方式进行合并,会产生一个新的版本节点。加上-m参数,是因为这种方式合并过程中会自己提交合并后的版本。 + +### **分支管理** + +- 团队合作的分支管理组图就是你们要的方式 + +![clipboard.png](media/202749bd52950c0c839d73190cd2fd9d.png) + +### **BUG分支** + +- 因为总会在自己工作的过程中出现紧急的需要更改的bug,但是现在工作区中的内容还不能提交,所以必须生成现在工作区的一个快照,等处理完紧急的bug之后,再来回复工作区的内容。 + +``` +git stash +``` +将当前的工作现场储存起来,等到修复完成bug之后可以再次进行更改。工作现场包括工作区和stage缓存区。然后可以清空工作区和缓存区的内容,新建bug分支进行工作。 + +``` +git stash list +``` +用来查看保存中的工作区。 + +``` +git stash apply stash@{0} +``` +恢复stash内容,但并不清楚stash列表中的内容。 + +``` +get stash drop +``` +用来删除stash列表中的内容。(因为已经恢复或者没有必要恢复) + +``` +git stash pop +``` +可以用来弹出stash列表中的内容。 + +### **Feature分支** + +- 当添加一个新的功能的时候,因为是一些实验性的代码,所以要创建一个单独的分支进行处理。 + +- git checkout -b feature-vulcan + +创建一个新的功能分支 +``` +git status + +git add vulcan.py + +git commit -m "add feature vulcan" + +git checkout dev + +git merge vulcan.py + +git branch -D feature-vulcan 不合并,强制删除 +``` \ No newline at end of file diff --git a/Git/9 多人协作.md b/Git/9 多人协作.md new file mode 100644 index 00000000..742f9403 --- /dev/null +++ b/Git/9 多人协作.md @@ -0,0 +1,54 @@ + +## 9 多人协作 + +通过远程库的push和pull操作实现夺人合作 + +### **推送分支或分支内容** + +- 当从远程库进行克隆的时候,实际上已经将本地master分支和远程的master分支进行乐关联。 + +``` +git remote [-v] +``` +可以显示与远程库关联的信息 + +``` +git push origin master +``` + +推送分支,吧分支上的所有本地内容提交到远程库中的相同分支当中。 + +### **哪些分支需要推送** +- mater分支是主分支,需要实时推送 +- dev是开发分支,所有成员都要在上面工作。也需要与远程同步。 +- bug分支只需要在本地修复bug,没有必要推送到远程。 +- feature分支,可以不用推送到远程。单人开发不用,夺人开发要推送到远程。 + +### **抓取分支或者分支的内容** + +``` +git checkout -b dev origin/dev +``` +可以用来抓取远程分支dev,这样会建立一个本地的本地的dev分支与远程的dev分支进行关联,可以直接实现dev分支的控制(push) + +``` +git pull \ \ +``` + +如果Git push失败,说明,当前的版本不是最新的版本。git pull +可以将远程库中的最新版本拉去到本地。 + +``` +git branch --set-upstream dev origin/\ +``` +这样会制定git的本地分支与远程的分支之间的链接。 + +- 如果git pull有冲突,与分支合并中解决冲突的方法一直。 + +### **多人协作的协作模式通常是这样:** + +1. 首先,可以试图⽤git push origin branch-name推送自己的修改; +2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; +3. 如果合并有冲突,则解决冲突,并在本地提交; +4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! +5. 如果git pull提“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。 diff --git a/Git/git.md b/Git/git.md deleted file mode 100644 index 12f87de4..00000000 --- a/Git/git.md +++ /dev/null @@ -1,451 +0,0 @@ -Git的本地操作 - -> 参考文献 -> * [git使用教程](https://github.com/geeeeeeeeek/git-recipes/wiki) - -## 1 git安装 - -- Linux上通过命令行能够很轻松的部署好git -- Windows上需要安装GitBash,模拟linux命令行 -- 安装完成后需要配置全局信息的命令 - -``` -git config --global user.name "Your Name" -git config --global user.email "email@example.com" -``` - -## 2 创建版本库 - -``` -git init -``` -生成.git文件,将这个目录初始化为一个版本的仓库。 - -``` -git add readme.txt -``` - -将文件添加到缓冲区,可以连续多次向缓冲区中添加东西 - -``` -git commit -m "wrote a message" -``` -将缓冲区的文件提交到历史记录当中当中,可以一次提交对缓冲区的多次修改。 - -## 3 时光穿梭机 - -``` -git status -``` - -用来查看当前仓库的状态。主要有changes not staged for -commit状态(工作区有变化没有提交),chages to be -committed状态(缓存区有变化等待提价) - -``` -git diff readme.txt -``` - -用来对比工作区和历史记录内容的差别。 - -## 4 版本回退 - -``` -git log -``` -用来查看版本的历史记录 - -``` -git log --pretty=oneline -``` - -在一行显示历史记录 - -``` -git reset --hard HEAD\^ -``` - -回退到上一次的历史记录 -``` -git reset --hard id -``` - -回退到指定id的版本 - -``` -git reflog -``` - -用来查看所有操作的历史记录,可以使用reset命令去定位到任何版本 - -## 5 工作区和暂存区 - -### **概念理解** - -- 工作区Wording Directory:在电脑中能够看到的目录,是工作区 - -- 版本库Repository:工作区有一个隐藏的目录.git是版本库 - -- 版本库中有Stage暂存区和master等分支以及一个纸箱master的指针HEAD - -- git跟踪管理的是对文件的修改而并非文件本身 - -### **撤销修改** -``` -git checkout --readme.txt -``` -把readme.txt在工作区的修改全部撤销掉。如果缓存区有readme.txt的中间状态,则从缓存区恢复,如果缓存区没有readme.txt的中间状态,则从版本库中恢复。 - -``` -git reset HEAD readme.txt -``` -把readmen.txt在缓存区的修改全部撤销掉。但是依然会保留工作区的修改。 - -### **删除文件** -``` -git rm test.txt -``` - -把某个文件从缓存区删掉,然后commit之后会从版本库删掉。如果删错了可以通过checkout从缓存区恢复这个文件。 - -## 7 Git的远程操作 - -远程操作主要是指,在不同的仓库之间进行提交和代码更改。是一个明显的对等的分布式系统。其中本地个仓库与远程仓库,不同的远程仓库之间都可以建立这种关系。这种关系之间的操作主要有pull和push。 - -### **远程仓库** - -创建SSH key远程仓库和本地仓库一般是通过ssh通信的,需要ssh通信的加密钥匙。 - -id_rsa是私钥,id_rsa.pub是公钥,可以告诉别人。 -``` -ssh-keygen -t rsa -C 'yinkanglong@163.com' -``` - -登录github,添加公钥内容。建立本地与远程仓库的通信协议 - -### **添加远程仓库** - -github的界面操作可以很轻松的创建一个远程仓库。但如果想要直接上传自己本地的完整git库,必须创建一个没有lisence和readme的空库。 - -``` -git remote add origin git@github.com:michaelliao/learngit.git -``` -将本地仓库和远程仓库进行关联。一般都叫远程关联仓库为origin,本地的主干分支一般名为master - -``` -git push -u origin master -``` - -将本地的主干分支master推送到远程的origin分支上。-u参数实现了两个分支的关联,将远程的git仓库的master和本地的master进行了分支管理,当再次执行时,只需要使用git -push origin master命令。 - -### **从远程仓库克隆** - -``` -git clone git@github.com:michaelliao/gitskills.git -``` - - -### **git remote** - -``` -git remote -``` - -列出你和远程仓库之间的远程连接 - -``` -git remote -v -``` - -列出每个连接的名字和url - -``` -git remote add -``` - -创建一个新的远程连接并添加名字 -``` -git remote rm -``` - -移除远程仓库的链接 - -### **git fetch** - -``` -git fetch -``` - -拉取仓库中的所有分支(包括相关的文件和所有的提交) -``` -git fetch -``` - -拉取制定仓库中的所有分支(包括相关的文件和所欲的提交) - -> 注意,这个步骤知识拉取远程的分支,在本地并没有合并也没有生成本地分支,知识一个可读的远程分支。 -> * 使用git branch -r 命令可以查看所有只读的远程分支。 -> * 使用gitcheckout命令可以创建本地分支,并与远程分支关联。 -> * 使用git merge命令可以将远程分支与本地分支合并。 - -### **git pull** -``` -git pull remote -``` - -拉取当前分支对应的远程副本,并将远程副本的更改写入本地副本。相当于git fetch之后git merge。 - -``` -git pull -rebase \ -``` - -使用git rebase命令合并远程分支与本地分支,不使用git merge - -### **git push** - -``` -git push \ -``` - -将制定分支推送到远程分支。包括所有的文件和提交。 - -``` -git push --force -``` -强制推送 -``` -git push --all -``` - -本地所有的分支推送到远程仓库当中 - -``` -git push --tags -``` - -将本地所有标签推送到远程仓库中 - -## 8 分支管理 - -这里主要体现的git的功能的分离,这才是真正的git吧。每一个分支都是一个单独的可以分离的工作单位。每个用户可以建立不同的分支进行工作,最终提交到同一个开发分支上。一个用户可以建立不同的分支实现不同的功能,最终提交到同一个用户分支上。分支的灵活性,可以让我们很容易的实现不同分工的分割。 - -### **创建分支** - -``` -git checkout -b dev -``` -创建分支,并且将工作目录切换到dev的工作目录上。 - -``` -git branch dev -``` -使用当前版本分支创建新的分支(即添加一个分支指针)。 -``` -git checkout dev -``` -将工作区切换到某一个分支指针所指的版本上。 -``` -git branch -``` -会列出所有的分支目录。 - -### **分支合并** - -``` -git merge dev -``` - -将dev分支合并到当前工作目录下的分支上(不一定是产生他的父分支) -``` -git branch -d dev -``` -用来删除一个已经无效的分支指正,但是在这个分支指针上左右的操作都会保留。 - -### **解决冲突** - -- 当合并过程中出现冲突,会进入长途解决工作区,手动解决后提交,就会退出。 - -- 关于一点,提交后的分支有必要继续工作吗,都行。完全可以提交后删掉重新创建一个分支,获取主干分支上集成的最新内容,然后继续工作。也可以直接在分支上合并一次主干分支,然后得到最新的内容,继续在原来的分支上进行工作。 - -``` -git log --graph -``` - -可以查看分支合并图。 - -### **分支合并方式** -``` -git merge --no-ff -m "merge messge" dev --no-ff -``` -不适用fastfoward方式进行合并,会产生一个新的版本节点。加上-m参数,是因为这种方式合并过程中会自己提交合并后的版本。 - -### **分支管理** - -- 团队合作的分支管理组图就是你们要的方式 - -![clipboard.png](media/202749bd52950c0c839d73190cd2fd9d.png) - -### **BUG分支** - -- 因为总会在自己工作的过程中出现紧急的需要更改的bug,但是现在工作区中的内容还不能提交,所以必须生成现在工作区的一个快照,等处理完紧急的bug之后,再来回复工作区的内容。 - -``` -git stash -``` -将当前的工作现场储存起来,等到修复完成bug之后可以再次进行更改。工作现场包括工作区和stage缓存区。然后可以清空工作区和缓存区的内容,新建bug分支进行工作。 - -``` -git stash list -``` -用来查看保存中的工作区。 - -``` -git stash apply stash@{0} -``` -恢复stash内容,但并不清楚stash列表中的内容。 - -``` -get stash drop -``` -用来删除stash列表中的内容。(因为已经恢复或者没有必要恢复) - -``` -git stash pop -``` -可以用来弹出stash列表中的内容。 - -### **Feature分支** - -- 当添加一个新的功能的时候,因为是一些实验性的代码,所以要创建一个单独的分支进行处理。 - -- git checkout -b feature-vulcan - -创建一个新的功能分支 -``` -git status - -git add vulcan.py - -git commit -m "add feature vulcan" - -git checkout dev - -git merge vulcan.py - -git branch -D feature-vulcan 不合并,强制删除 -``` -## 9 多人协作 - -通过远程库的push和pull操作实现夺人合作 - -### **推送分支或分支内容** - -- 当从远程库进行克隆的时候,实际上已经将本地master分支和远程的master分支进行乐关联。 - -``` -git remote [-v] -``` -可以显示与远程库关联的信息 - -``` -git push origin master -``` - -推送分支,吧分支上的所有本地内容提交到远程库中的相同分支当中。 - -### **哪些分支需要推送** -- mater分支是主分支,需要实时推送 -- dev是开发分支,所有成员都要在上面工作。也需要与远程同步。 -- bug分支只需要在本地修复bug,没有必要推送到远程。 -- feature分支,可以不用推送到远程。单人开发不用,夺人开发要推送到远程。 - -### **抓取分支或者分支的内容** - -``` -git checkout -b dev origin/dev -``` -可以用来抓取远程分支dev,这样会建立一个本地的本地的dev分支与远程的dev分支进行关联,可以直接实现dev分支的控制(push) - -``` -git pull \ \ -``` - -如果Git push失败,说明,当前的版本不是最新的版本。git pull -可以将远程库中的最新版本拉去到本地。 - -``` -git branch --set-upstream dev origin/\ -``` -这样会制定git的本地分支与远程的分支之间的链接。 - -- 如果git pull有冲突,与分支合并中解决冲突的方法一直。 - -### **多人协作的协作模式通常是这样:** - -1. 首先,可以试图⽤git push origin branch-name推送自己的修改; -2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; -3. 如果合并有冲突,则解决冲突,并在本地提交; -4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! -5. 如果git pull提“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。 - -## 10 标签管理 - -### **创建标签** - -``` -git tag v1.0 -``` - -对当前版本打标签,为v1.0 - -``` -git tag -``` -查看所有已经创建的标签 - -``` -git tag v0.9 6.225 -``` - -对指定id的版本打标签 -``` -git show v0.9 -``` - -查看标签信息 - -``` -git tag -a v0.1 -m "version 0.1 released" 3628164 -``` - -创建带有标签说明的标签 - -### **操作标签** - -``` -git tag -d v0.1 -``` - -删除制定版本的标签 - -``` -git push origin v1.0 -``` - -推送某个标签到远程 - -``` -git push origin --tags -``` - -一次性推送所有标签。 - -``` -git tag -d v0.9 - -git push origin :refs/tags/v0.9 -``` - -从远程删除标签,先在本地删除标签,然后将操作推送到远程。 - diff --git a/Git/github.md b/Git/github.md index 7aac4273..5a01dd3a 100644 --- a/Git/github.md +++ b/Git/github.md @@ -14,7 +14,7 @@ * Github主页仓库主页——仓库相关的信息和相关操作 ## 2 pull request -## 2 fork sycnize +## 2 fork syncize > 参考文献 > * [https://blog.csdn.net/qq_22918243/article/details/89642445](https://blog.csdn.net/qq_22918243/article/details/89642445) diff --git a/Git/image/2021-06-15-11-04-57.png b/Git/image/2021-06-15-11-04-57.png new file mode 100644 index 00000000..a6f761e7 Binary files /dev/null and b/Git/image/2021-06-15-11-04-57.png differ