Git相关

文章目录

参考网址链接:https://www.liaoxuefeng.com/wiki/896043488029600
参考网址链接:菜鸟教程Git教程
参考网址链接:Git Gui基本操作

快速操作

项目操作前

  1. 克隆远程项目
    git clone git@github.com:ker945/spiders.git

  2. 添加远程仓库相关
    git remote -v
    git remote rm origin
    git remote add gitee git@github.com:ker945/spiders.git
    git remote add github git@gitee.com:ker945/spiders.git
    git remote -v

  3. 更新、创建本地分支、关联远程分支相关
    git fetch gitee
    git branch -a
    git checkout -b dev-ker945
    git pull
    git branch --set-upstream-to=gitee/dev-ker945 dev-ker945

5.5.2同步合并远程仓库分支文件(适用于:远程库不为空或者文件多与本地库)

(如果新建立的远程库不为空或者比本地仓库多提交有文件,则执行抓取同步远程库操作来讲远程库的更多文件抓到本地,然后再进行git push推送。注意:本地和远程库的文件不同步则必须做这一步,否则后面的提交会失败)
$ git pull --rebase origin master

项目操作中

  1. 选择工作分支
    git checkout dev-ker945

  2. 查看工作分支 及 远程工作分支状态情况
    git fetch gitee
    git status

  3. 本地库提交、合并操作
    git add .
    git commit -m " 提交描述信息 "
    git merge --no-ff -m " 合并描述信息 " < branch name >
    git merge -m " 合并描述信息 " < branch name >

4.3.2选择性复制提交分支(适用于跨分支添加)

复制指定commit id的提交到指定分支上,命令:git cherry-pick 命令
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick命令,把bug提交的修改“复制”到当前分支,避免重复劳动。命令如下:
$ git cherry-pick < commit >
也可以适用于在master主分支上修改并提交后,而dev分支未进行修改的情况下,在dev分支下进行如上指令来复制master的修改提交到当前的dev分支上。
注意:在dev分支上修复已经提交的bug提交,需要将dev工作完成 且 需要add添加和commit提交完成后再进行命令git cherry-pick < commit >,否则会提示错误。

  1. 撤销修改操作
    git checkout - - file
    git reset HEAD

  2. 版本回滚操作
    git reset --hard commit_id
    git reset --hard HEAD^
    git reset --hard gitee/master
    git reset --hard gitee/dev-ker945

  3. 远程库推送、抓取
    git push -u gitee dev-ker945
    git push -u -f gitee dev-ker945
    git push
    git pull --rebase gitee dev-ker945
    git pull

项目操作后

  1. 查看提交日志、历史命令、合并图谱
    git log
    git log --onelinde
    git reflog
    git reflog show dev-ker945
    git log --graph --pretty=oneline --abbrev-commit
    git log --oneline -2

  2. git 重命名本地分支,并提交到远程
    重命名 git branch -m oldBranchName newBranchName
    删除远程分支:git push origin :oldBranchName
    将重命名过的分支提交:git push origin newBranchName

  3. 修改最近一次提交的备注信息
    git commit --amend
    按 c 进入编辑状态,按 ESC键 退出编辑状态,按 :wq 保存退出
    如果再次push显示落后与远程分支,需要强制推送 或 pull

  4. 执行 git gui 后打开gui图形化窗口, 会提示 compress the database now?
    只需要执行下面代码即可:
    git config --global gui.gcwarning false

注意事项

注意:

一、Git提交空目录
git和 svn不同,仅仅跟踪文件的变动,不跟踪目录。所以,一个空目录,如果里面没有文件,即便 git
add这个目录,另外在别处 check out 的时候,是没有这个空目录的。
只跟踪文件变化,不跟踪目录,这么设计是有原因的。但这会带来一些小麻烦。有时候,确实需要在代码仓库中保留某个空目录。比如测试时需要用到的空目录。解决办法:

  1. 目录是空的 这种情况下只需要在目录下创建.gitkeep文件,然后在项目的.gitignore中设置不忽略.gitkeep
  2. 目录中有文件 目录中已经存在文件,那就需要首先在根目录中设置!.gitignore,然后在目标目录也创建一个.gitignore文件,并在文件中设置。
    参考网址:https://blog.csdn.net/szq2k08/article/details/73867394

二、 .gitignore忽略文件未生效
在项目开发过程中个,一般都会添加 .gitignore 文件,规则很简单,但有时会发现,规则不生效。 原因是 .gitignore 只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交。命令如:
注意:符号点 . 代表当前缓存的所有文件,也可以使用 git rm --cached file 来停止跟踪file文件
git rm -r --cached .

git add .

git commit -m ‘update .gitignore’

正文:

一、安装和创建Git仓库

1.1在Windows上安装Git

在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像https://npm.taobao.org/mirrors/git-for-windows/),然后按默认选项安装即可。

安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name “Your Name”
$ git config --global user.email “email@example.com”

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

查看用户名和邮箱地址:
$ git config user.name
$ git config user.email

修改用户名和邮箱地址
$ git config --global user.name “xxxx”
S git config --global user.email “xxxx”

查看配置信息列表:
$ git config --list

1.2创建版本库(仓库/目录,文件)

仓库可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

1.2.1创建一个版本库

首先,选择一个合适的地方,创建一个空目录:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
pwd命令用于显示当前目录。在我的Mac上,这个仓库位于/Users/michael/learngit。

第二步,通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
目录内生成.git目录,默认是隐藏的,用ls -ah命令就可以看见。
$ ls -ah

1.2.2创建文件,把文件添加到版本库

在目录learngit目录下创建编写一个readme.txt文件,内容如下:
Git is a version control system.
Git is free software.
一定要放到learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

第一步,用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt
也可以使用 git add . 用符号 点 来代替所有文件
执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。

第二步,用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m “wrote a readme file”

[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

嫌麻烦不想输入-m "xxx"行不行?确实有办法可以这么干,但是强烈不建议你这么干,因为输入说明对自己对别人阅读都很重要。实在不想输入说明的童鞋请自行Google,我不告诉你这个参数。

git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m “add 3 files.”

二、本地仓库相关(增、删、该、查)

2.1本地仓库的增删改查(非本地仓库分支)

2.1.1初始化一个Git仓库,使用git init命令。

$ git init

2.1.2添加文件到Git仓库,分两步:

$ git add < file >
注意:可反复多次使用,添加多个文件;也可以使用 git add . 用符号 点 来代替所有文件
$ git commit -m < message >
完成。

2.1.3时刻掌握仓库当前的状态

查看本地仓库状态之前首先更新下远程分支情况:
$ git fetch github

git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
git pull则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

然后再查看本地仓库状态
$ git status

  • 更新指定分支
    如果没有显示远程分支,可以指定更新远程库分支,如:
    $ git fetch github

  • 更新所有分支(包括远程分支)
    先更新指定远程分支,以后可以更新所有分支,命令可以简写为:
    $ git fetch

2.1.4查看文件修改内容

$ git diff < file >
注意:如果文件有修改,则可以重复步骤2,进行添加文件和提交修改。

2.1.5显示提交日志 及 合并图表(从最近到最远的)

$ git log
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上–pretty=oneline参数
$ git log --pretty=oneline

$ git log --oneline
注意:在输出里 HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
我们还可以用git log --graph 选项,查看历史中什么时候出现了分支、合并:
$ git log --graph --pretty=oneline --abbrev-commit

注意:如果找不到版本号,可以用git reflog查看命令历史,以便确定要回到未来的哪个版本。

2.1.6查看命令历史,以便确定要回到未来的哪个版本。

$ git reflog

小结一下: HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

2.1.7版本回滚 版本的历史之间穿梭,使用命令

$ git reset --hard commit_id
或者版本回溯到上一个版本,使用命令
$ git reset --hard HEAD^
注意:在Git中,用HEAD表示当前版本,也就是最新的提交1094adb…(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD ^^ ,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成HEAD~100。

版本回滚,通过远程仓库分支,指令如下:
$ git reset --hard gitee/master

5.4.2强制推送远程仓库分支 (自己的远程分支版本回退的方法)

这将抹掉所有远程仓库内容,将远程仓库内容强制性和本地一模一样。指令如:
$ git push -u -f origin master

注意:如果本地分支回滚的话,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

2.1. 8查看版本文件内容,用来查看是否回溯或穿梭到指定的版本

$ cat < file >
注意:如果已经回到先前的版本,后想要再回到现在的版本则用 查看命令历史 git reflog 来查看历史版本的commit_id,然后通过穿梭命令 git reset --hard commit_id 来重新回到指定的版本。

2.1.9工作区、版本库、暂存区的理解

参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/897271968352576
工作区:就是我们创建的仓库目录。
暂存区:版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。 操作上即: git add < file >
版本库:工作区内有个隐藏的文件目录.git即是版本库。操作上即: git commit -m "xxx"

注意:
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支,即提交版本库,形成版本。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改

2.2本地仓库的撤销修改、删除

Git是如何跟踪修改的,每次修改文件,如果不用git add < file >到暂存区,那就不会加入到commit中。
比如先第一次修改文件后进行了添加git add,然后在进行第二次修改,继而再提交git commit,则第二次修改不会不提交到分支内。
正确的顺序应该是:
第一次修改 -> git add -> 第二次修改 -> git add -> git commit

2.2.1撤销修改

场景1:工作区撤销修改(< file > 修改以后)
当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
$ git checkout - - file。

注意:命令格式是 - - (连着两个 - ),且前后各有一个空格,命令格式不对有出现error.
注意:git checkout – file 命令其实是从版本库中检出的意思,总之,就是让这个文件回到最近一次git commit或git add时的状态。
注意:git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

场景2:暂存区撤销修改(git add < file > 以后)
当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
$ git reset HEAD ,就回到了场景1,第二步按场景1操作。

场景3:版本库撤销修改(git commit 以后)
已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。使用命令
$ git reset --hard commit_id

$ git reset --hard HEAD^

2.2.2删除文件(删除工作区或版本库文件,从版本库恢复文件到工作区)

参考网址:https://www.liaoxuefeng.com/wiki/896043488029600/900002180232448

如果要从版本库中删除文件,那就用命令git rm删掉,并且git commit
$ git rm < file >
$ git commit -m "remove < file >"

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本
$ git checkout – < file >

三、分支操作:创建、查看、合并、删除、解决冲突

参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424
Git鼓励大量使用分支:

3.1分支的增删改查、合并、更新分支列表

3.1.1分支的查看、更新远程分支列表:

$ git branch
或 查看远程仓库分支列表
$ git branch -r
或 查看已有的本地及远程分支
git branch -a

更新指定分支
如果没有显示远程分支,可以指定更新远程库分支,如:
$ git fetch github

git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
git pull则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

更新所有分支(包括远程分支)
先更新指定远程分支,以后可以更新所有分支,命令可以简写为:
$ git fetch

3.1.2分支的创建(创建对应远程分支的本地分支)、切换

创建分支:
$ git branch < name >
创建+切换分支:
$ git checkout -b < name >或者 $ git switch -c < name >

6.2创建本地和远程分支对应的分支
使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致,即创建并切换与远程dev分支对应的本地dev分支命令如下:
$ git checkout -b dev origin/dev

切换分支:
$ git checkout < name >
或者
$ git switch < name >

3.1.3分支的推送、关联、抓取

当本地创建关联远程分支后,就可以在dev上继续修改,然后,时不时地把
本地dev分支push到远程dev分支,命令如:
$ git push origin dev。

远程分支的关联、抓取,参照第5部分 < 远程仓库相关 >内容

3.1.4分支的合并、删除、解决冲突

合并某分支到当前分支,无参数则默认使用fast forward快速合并模式,合并后的历史没有分支:
$ git merge < name >

$ git merge --no-ff -m “merge with no-ff” < name >
注意:合并分支时,加上 --no-ff参数 就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

删除本地分支:
$ git branch -d < name >

删除远程分支,格式如git push --delete 远程仓库名 < 远程分支 >,示例:
$ git push --delete origin dev

修剪远程分支
如果在远程仓库已经删除的分支在本地依然可以看到,可以使用 git remote prune origin 命令删除 远程仓库不存在的分支:
$ git remote prune origin

合并分支时解决冲突
参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344
当分支和主分支都对一个文件进行修改后,再进行自动合并分支时,就必须首先解决冲突。
解决冲突后,再提交,合并完成。
分支和主分支都修改并add添加和commit提交后,进行merge合并会提示文件冲突,这时再次查看修改的文件则会看见冲突内容。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

用命令可以看到分支合并图:
$ git log --graph --pretty=oneline --abbrev-commit

四、分支管理策略

4.1分支开发的基本原则

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活
其次,干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本

注意:合并分支时,加上 --no-ff参数 就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 如下:
$ git merge --no-ff -m “merge with no-ff” dev
合并后,我们用git log看看分支历史:
$ git log --graph --pretty=oneline --abbrev-commit

4.2bug分支

参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136
修复bug时,我们会通过创建新的bug分支git checkout -b bug-001进行修复后add添加commit提交,然后切换回master分之后merge合并,最后删除;

4.3dev分支

4.3.1git stash保存工作现场(适用于暂时离开当前分支)

当手头dev分支工作没有完成时,先把dev分支工作现场git stash一下,然后去bug分支修复bug,命令如下:
$ git stash
注意:保存工作现场是在dev分支,保存完毕后可用git stash list查看,就看不到任何stash内容列表
修复bug后,再git stash pop,回到工作现场,命令如下:
$ git stash pop

注意:Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一种办法是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了
恢复指定的stash,用命令:
$ git stash apply stash@{0}

注意:回到工作现场后完成工作勿忘add添加和commit提交。

4.3.2选择性复制提交分支(适用于跨分支添加)

复制指定commit id的提交到指定分支上,命令:git cherry-pick 命令
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。命令如下:
$ git cherry-pick < commit >
也可以适用于在master主分支上修改并提交后,而dev分支未进行修改的情况下,在dev分支下进行如上指令来复制master的修改提交到当前的dev分支上。**
注意:在dev分支上修复已经提交的bug提交,需要将dev工作完成 且 需要add添加和commit提交完成后再进行命令git cherry-pick < commit >,否则会提示错误。

4.4feature新功能分支

开发一个新feature,最好新建一个分支,命令如下:
$ git checkout -b feature1

$ git switch -c feature1
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
$ git branch -D feature1

五、远程仓库相关(秘钥、关联、推送、克隆、同步、抓取、回滚等分支操作)

5.1配置秘钥关联远程仓库网站

5.11配置远程仓库需要git在本地(windows)生成ssh 密钥

首先,检查下自己之前有没有已经生成:
在开始菜单中打开git下的git bash(当然,在其他目录下打开git bash也是一样的)然后执行:
$ cd ~/.ssh
如果能进入到.ssh文件目录下 ,则证明,之前生成过.ssh秘钥,可以直接使用里面的秘钥。
如果不能进入到.ssh文件目录下,则执行生成秘钥命令:
$ ssh-keygen -t rsa -C "GitHUB上的的邮箱"
接着按3个回车 则默认会在C盘的用户目录下生成:
c/users/administrator/.ssh/id_rsa.pub 和 id_rsa 两个文件,其中id_ras,pub为公钥,用来配置远程仓库使用。另一个则为私钥。
则表示生成秘钥成功。

接着打开GitHUB上的设置选项,然后配置 SSH keys 选项,只需要将Git本地生成的公钥id_ras.pub用记事本打开或者使用命令 cat id_ras.pub 打开后复制全部内容,然后粘贴进 SSH keys选项进行配置就行,标题可写成指定电脑,因为远程仓库可以配置多个 SSH keys,即可配置多台电脑。

5.2关联远程仓库

适用情况:先有本地库,后创建空的 GitHUB远程库。然后关联远程库,本地仓库推送至远程库。
参考网址:https://www.liaoxuefeng.com/wiki/896043488029600/898732864121440
关联远程仓库(GitHUB、Gitee)
指令如下:
$ git remote add origin git@github.com:GitHUB上的用户名/GitHUB上的仓库名.git
($ git remote add gitee git@gitee.com:GitHUB上的用户名/Gitee上的仓库名.git)

$ git remote add origin https://github.com/GitHUB上的用户名/GitHUB上的仓库名.git
($ git remote add gitee https://gitee.com/Gitee上的用户名/Gitee上的仓库名.git)
注意:添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

5.3关联远程分支

通过指令 git pull 可以抓取远程分支到本地仓库分支,即同步本地库。
如果抓取分支pull失败,git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,应根据提示,设置dev和origin/dev的链接, 指令如下:
$ git branch --set-upstream-to=origin/dev dev

创建分支关系完成后,git status 查看状态时会自动提示本地仓库分支与远程仓库分支的同步关系。

5.4推送远程仓库分支(git push < remote > < branch>)

5.4.1初次推送远程仓库分支

指令如下:
$ git push -u origin master
用git push命令,实际上是把当前分支master推送到远程。
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令不再需要添加 -u参数。
推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样了

5.4.2强制推送远程仓库分支(自己的远程分支版本回退的方法)

这将抹掉所有远程仓库内容,将远程仓库内容强制性和本地一模一样。指令如:
$ git push -u -f origin master

注意:如果本地分支回滚的话,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

5.4.3正常推送远程仓库分支

从此以后,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,现在,就拥有了真正的分布式版本库!

5.5克隆、同步、抓取、回滚关联远程仓库分支

5.5.1克隆远程仓库分支

适用情况:先有远程库,从本地克隆远程库到本地库。
参考网址:https://www.liaoxuefeng.com/wiki/896043488029600/898732792973664
远程库准备好后,下一步就可以开始用命令git clone克隆一个本地库:

$ git clone git@github.com:GitHUB上的用户名/GitHUB上的仓库名.git

然后进入本地库目录查看 GitHUB上的仓库名的目录,里面已经存在 README.MD文件。

5.5.2同步合并远程仓库分支文件(适用于:远程库不为空或者文件多与本地库)

(如果新建立的远程库不为空或者比本地仓库多提交有文件,则执行抓取同步远程库操作来讲远程库的更多文件抓到本地,然后再进行git push推送。注意:本地和远程库的文件不同步则必须做这一步,否则后面的提交会失败)
$ git pull --rebase origin master

5.5.3抓取远程仓库分支(注意:抓取前先关联远程分支)

抓取远程仓库分支到本地仓库分支,适用于其他协同伙伴率先提交到远程仓库分支的情况,可通过git pull < remote > < branch > 来将本地仓库分支同步于远程仓库分支,指令如:
$ git pull github dev

5.5.2同步合并远程仓库分支文件(适用于:远程库不为空或者文件多与本地库)

(如果新建立的远程库不为空或者比本地仓库多提交有文件,则执行抓取同步远程库操作来讲远程库的更多文件抓到本地,然后再进行git push推送。注意:本地和远程库的文件不同步则必须做这一步,否则后面的提交会失败)
$ git pull --rebase origin master

注意:每次git status查看本地库分支状态以后,记得关联本地分支与远程分支,这样在查看状态的时候会显示他们的同步状态。

关联远程分支的指令如:
$ git branch --set-upstream-to=origin/dev dev

.

5.5.4回滚远程仓库分支(回滚自己的远程仓库分支、回滚公共远程仓库分支)

参考链接:https://www.cnblogs.com/Super-scarlett/p/8183348.html

5.5.4.1回滚自己的远程仓库分支

5.4.2强制推送远程仓库分支 (自己的远程分支版本回退的方法)

这将抹掉所有远程仓库内容,将远程仓库内容强制性和本地一模一样。指令如:
$ git push -u -f origin master

注意:如果本地分支回滚的话,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

5.5.4.2回滚公共远程仓库分支

六、多人协作工作模式(重温:远程仓库相关)

参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。

要查看远程库的信息,用git remote,命令:
$ git remote
或者,用git remote -v显示更详细的信息,命令:
$ git remote -v

6.1推送本地仓库分支 到 远程仓库分支

本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支到远程仓库,使用git push origin branch-name,推送dev分支命令如下:
$ git push origin dev
与推送主分支到远程仓库的命令格式一样,为 $ git push origin master

注意: 并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
_1、master分支是主分支,因此要时刻与远程同步;
_2、dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;dev分支推送到远程的命令在当前master分支下就可以进行推送
_3、bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
_4、feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

当你的小伙伴从远程库clone时,克隆指令为:
$ git clone git@github.com:GitHUB用户名/learngit.git,

注意:
默认情况下,你的小伙伴只能看到本地的master分支,即:
clone克隆指令只能克隆远程仓库的master主分支,不带克隆dev分支。 可以用git branch命令查看刚clone下来的库只能看到master主分支。

如果要在dev分支上开发,就必须创建远程origin的dev分支到本地。

6.2创建本地和远程分支对应的分支

使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致,即创建并切换与远程dev分支对应的本地dev分支命令如下:
$ git checkout -b dev origin/dev

当本地创建关联远程分支后,就可以在dev上继续修改,然后,时不时地把
本地dev分支push到远程dev分支,命令如:
$ git push origin dev。

6.3抓取远程分支到本地

如果其他小伙伴 先 推送了dev的远程分支,我方后本地push推送失败,可先用git pull < remote > < branch >把最新的提交从远程分支origin/dev抓下来,然后,在本地合并,解决冲突,再推送,命令如:
$ git pull origin dev

6.4创建本地分支和远程分支的链接关系

如果抓取分支pull失败,git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,应根据提示,设置dev和origin/dev的链接, 指令如下:
$ git branch --set-upstream-to=origin/dev dev
创建分支关系完成后,git status 查看状态时会自动提示本地仓库分支与远程仓库分支的同步关系。

如果pull抓取成功,但是合并有冲突,要先处理冲突。 解决的方法和分支管理中的解决冲突完全一样。解决后,add添加 并 commit提交,再push推送完成。
.
.
因此,多人协作的工作模式通常是这样:
-1首先,可以试图用 git push origin < branch-name> 推送自己的修改;
-2如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
-3如果合并有冲突,则解决冲突,并在本地add添加并commit提交;
-4没有冲突或者解决冲突并add添加和commit提交后,再用git push origin < branch-name>推送就能成功!
-5如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to < branch-name> origin/< branch-name>
这就是多人协作的工作模式,一旦熟悉了,就非常简单。

6.5创建标签

_22.1、新建一个标签,切换需要打标签的分支,默认为HEAD,也可以指定一个commit id;切换到需要打标签的分支上git checkout master,执行命令git tag < tagname>
$ git tag v1.0
或 可以指定标签信息,用-a指定标签名,-m指定说明文字,命令git tag -a < tagname> -m “blablabla…”
$ git tag -a v1.0 -m "第一个版本标签"

_22.2、对以往的提交进行打标签,需要找到历史提交的commit id,然后创建标签指令的标签名后面跟上历史提交的commit id 就可以。即首先通过 git log --pretty=oneline --abbrev-commit 命令来查看历史提交的commit id ,然后输入命令 git tag < tagname > commit id,如下:
$ git tag v0.9 f52c633
或 可以指定标签信息,用-a指定标签名,-m指定说明文字,
$ git tag -a v0.9 -m “version 0.9 released” f52c633

_22.3、查看所有标签,命令git tag.
$ git tag
_22.4、查看标签信息可以用git show < tagname>,标签不是按时间顺序列出,而是按字母排序的。.指令如:
$ git show v0.9
.

6.6操作标签

_23.1、推送一个本地标签,命令git push origin < tagname>以;
$ git push origin v1.0
_23.2、推送全部未推送过的本地标签。命令git push origin --tags;
$ git push origin --tags
_23.3、删除一个本地标签,命令git tag -d < tagname>;
$ git tag -d v0.9
_23.4、删除一个远程标签,先从本地删除,然后从远程删除tag的命令格式如git push origin :refs/tags/< tagname>。
$ git push origin :refs/tags/v0.9

6.7使用GitHUB 、Gitee(码云)

_24.1、在GitHub上,可以任意Fork开源仓库;点“Fork”就在自己的GitHUB账号下克隆了一个项目的仓库,然后,从自己的账号下clone到本地仓库,指令如:
$ git clone git@github.com:ker945/bootstrap.git
自己拥有Fork后的仓库的读写权限;
注意:
一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址git@github.com:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。
干完活后,往自己的仓库推送。指令如:
$ git push origin master
如果你希望bootstrap的官方库能接受自己的修改,就可以在GitHub上发起一个pull request。当然,对方是否接受自己的pull request就不一定了。

_24.2、使用码云和使用GitHub类似。
参考网址:https://www.liaoxuefeng.com/wiki/896043488029600/1163625339727712
_24.2.1、在码云上注册账号并登录后,需要先上传自己的SSH公钥。

6.8关联多个远程库

_24.2.21、查看远程库信息,显示已经关联的远程库信息。指令如:
$ git remote -v
_24.2.22、删除已关联的名为origin的远程库。指令如:
$ git remote rm origin

接下来关联多个远程仓库,需要首先在GitHUB 或 Gitee上创建或存在远程仓库,远程仓库名称 和 本地仓库名称最好相同。

_24.2.23、关联GitHub的远程库,指令格式如$ git remote add 远程库名git@github.com:GitHUB用户名/GitHUB仓库名.git,实例指令如:
$ git remote add github git@github.com:ker945/learngit.git

_24.2.24、关联码云的远程库,指令格式如$ git remote add 远程库名 git@gitee.com:Gitee用户名/Gitee仓库名.git,实例指令如:
git remote add gitee git@gitee.com:ker945/learngit.git

关联多个远程库完成后,再用git remote -v查看远程库信息,可以看到多个远程库信息。指令如:
$ git remote -v

_24.2.3、推送到GitHub,使用命令:
$ git push github master

_24.2.4、推送到Gitee码云,使用命令:
$ git push gitee master

七、自定义Git

7.1忽略特殊文件

参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900004590234208
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
从而在工作区改动这些特殊文件后,工作区不会显示变动。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore

忽略文件的原则是:
25.1.1、忽略操作系统自动生成的文件,比如缩略图等;
25.1.2、忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
25.1.3、忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
一个示例的 .gitignore文件内容如下:(注意:#号后面需要跟空格)
#Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

#Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

#My configurations:
db.ini
deploy_key_rsa

特殊文件.gitignore创建并配置完成后,最后一步就是把这个.gitignore文件也add添加并commit提交到Git,就完成了!当然检验.gitignore的标准是git status命令是不是说working directory clean。

注意:
Windows用户如果在资源管理器里新建一个.gitignore文件,它会非常弱智地提示必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。

添加忽略特殊文件指令格式git add < file-name >:
$ git add App.class
有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了
强制添加文件到Git的忽略特殊文件中,使用指令格式 git add -f < file-name >,如:
$ git add -f App.class
如果添加不了忽略特殊文件,检查到底哪个规则写错了,指令如:
$ git check-ignore -v App.class

.

7.2配置别名

参考网址:https://www.liaoxuefeng.com/wiki/896043488029600/898732837407424
当前仓库的Git配置文件都放在.git/config文件中,指令$ cat .git/config 可查看
当前用户的Git配置文件放在用户主目录下(C:\Users\Admin…)的一个隐藏文件.gitconfig中,指令$ cat .gitconfig可查看
别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。

给Git配置好别名,就可以输入命令时偷个懒。我们鼓励偷懒。
类似于python的 import 模块 as 别名

Git配置别名格式如 git config --global alias.别名 原指令名,示例如:
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch

配置Git的时候,加上–global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用
配置一个git last,显示最后一次提交信息:
$ git config --global alias.last 'log -1’
这样指令 $ git last 就能显示最近一次的提交。

配置一个lg,显示分支合并图:
$ git config --global alias.lg "log --graph --pretty=oneline --abbrev-commit"
这样指令$ git lg,就能显示分支合并图

.

.
.
.
.
.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值