转载地址: https://blog.csdn.net/kkkkkxiaofei/article/details/41483039

情景1:多人协作之如何建立本地分支?

假若你已经clone了别人的仓库并且需要修改,最好的办法是建立自己的分支然后在合并,具体步骤如下:

1.建立一个自己的分支

git branch mybranch

此时可以使用git branch查看当前的分支情况,如不 出意外,则显示一个master一个mybranchi分支,而你当前在master分支上。

2.切换到新建的分支

git checkout mybranch

此时我们就可以在myabranch随意的修改,这并不会影响刚才的主分支master。注意:以上全部操作都不影响远程仓库,都是本地的备份。

3.假若我们已经在mybranch上做了很多修改。那么我们就可以在mybranch下进行commit

git commit -m "i had do some thing in mybranch"

4.此时我们回到原来的master分支;

git checkout master

5.将之前在branch上的修改合并到master;(合并分支到主分支)

git merge mybranch

6.此时mybranch分支对我们来说已经没用了,删除;(删除本地分支)

git branch -d mybranch

7.此时我们可以一次性将本地master的修改(merge后的)push到远程

git push

注意:如果想新建和切换branch一次完成,可以

git checkout -b branchname

情景2:多人协作之如何建立远程分支?

1.假如我和另一位同事一起操作一个rep(https://github.com/kkkkkxiaofei/trygit.git),情景1对于我本地来说是很保险的,因为我本地新建的branch修改好了去merge本地的master而后才push到远程,但问题是如果我push的远程的还是有很多问题那就得在远程的master上去修改,其实也可以在远程上新建分支,全部push到这个新的分支上去。

git checkout -b shopping_cart

此时在本地新建并切换 到了shopping_cart分支。

2.将本地分支链接到远程分支

git push origin :shopping_cart

在操作这一步之前远程上是没有shopping_cart这个分支的,而现在有了。

3.对当前这个分支做些操作然后push

git add 2.html

git commit -m "add 2.html in shopping_cart branch"

git push

这三行全是在shopping_cart分支上操作的,远程上现在已经有对应的分支去被push,可以去github上看看在shopping_cart分支上确实多了一个2.html文件。

4.我觉得我的代码应该没问题,所以我要合并到主分支。

git checkout master

git merge shopping_cart

git push

5.现在轮到我另外一个同时操作了,他首先克隆可该rep然后查看分支

git clone https://github.com/kkkkkxiaofei/trygit.git

git branch

此时只显示了* master,为什么呢?因为对于这个同事来说,他的本地的确只有master分支。

6.查看远程分支

git branch -r

显示:

origin/HEAD -> origin/master
origin/master
origin/shopping_cart

这回他看到了我在远程上建立的shopping_cart分支。

7.他想操作shopping_cart分支

git checkout shopping_cart

此时checkout是把远程的shopping_cart放到了本地,并且切换到了该分支。

查看本地分支状态可以发现本地的确有了该分支:

master
* shopping_cart

此时如果git remote show origin将会看到远程和本地同步了(都各自有两个分支)。

8.此时该同事查看了我在master上push的代码觉得没问题,那么远程的临时分支shopping_cart就没用了

git push origin :shopping_cart

显示:

To https://github.com/kkkkkxiaofei/trygit.git
 - [deleted]         shopping_cart

这条指令想必很熟悉吧,没错,建立和删除远程分支指令相同。执行指令,没有时就建立,就时就删除。

9.删除了远程分支,对于他而言本地的shopping_cart更没有用了,删除吧

git branch -d shopping_cart

如果报错试试 git branch -D shopping_cart

当然了,如果他觉得我的代码有问题,还可以在8.的时候修改自己的shopping_cart然后继续push到远程的shopping_cart。

情景3:撤销已git add的文件?

1.新建一个rep用以测试本例子,并且clone到本地

git clone https://github.com/kkkkkxiaofei/trygit.git

2.进入trygit文件夹下,该文件夹下只有一个README.md文件,手动修改该文件内容后查看diff

git diff

此时由于我修改了该文件,git显示差异如下:

diff --git a/README.md b/README.md
index 8686c6e..62a73fe 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
-trygit
+trygit by zxf
 ======
很显然,我是将trygit改为了trygit by zxf

3.此时的README.md文件的状态肯定是unstaged的,可以查看

git status

4.我们现在把该文件stage一下

git add README.md

5.现在查看修改的差异

git diff

发现没有任何内容,为什么呢?因为git diff是检测unstaged文件的差异。

6.现在查看staged的差异

git diff --staged

这时就输出了和2.一样的结果。此时文件的状态是changes to be committed.

7.哦,糟糕了,我想git add的文件并不是README.md,肿么办?

git reset HEAD README.md

此时出现如下提示:

Unstaged changes after reset:
M README.md

说明我们重置了HEAD指针后,README.md变为了unstaged.当然了,现在又可以用git diff了。

8.既然我都git add了错误的文件,那是不是之前的修改也要撤销呢?

git checkout -- READM.md

此时出现:

On branch master
Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean

意思太明显了,该文件又回到了以前的原始状态(内容为trygit),利用checkout可以将一个已经track的file变为untrack.

ps:什么是track呢?只要在当前git工作目录下文件是untrack的,然后利用git add就可以将件变为staged的,而当该文件最终的修改被push后,它就会回到原来的状态,这个原来的状态并不是指它刚建立的时候,那个时候它是untrack,而现在它被push后是变成了track状态了。举个最简单的例子,你新建的文件无论如何修改,你都看不到git diff,但当你把他git add 后,这时git 就可以track到了。

情景4:撤销已经commit的文件?

1.修改1.html然后提交(注意默认该文件已经是track状态)

git commit -a -m "add 1.html file"

-a可以捕捉所有已tack的文件的changes,这样就省去了git add xxx1 xxx2 xxx3的繁琐。

2.哦,糟糕了,我没有把我修改的内容注释写在提交里,我想补充,肿么办?

git reset --soft HEAD^

该指令会将commit状态转变为staging状态,此时git status:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

modified:   1.html

提示你有修改,可以commit的,那太明显了,这就是staging状态啊。

3.重新修改commit

git commit --amend -m "add 1.html file and modify its content"

这时git log可以看到只有后面这条commit记录,之前的没了。

注意,在这个情景中,其实如若只是把commit的注释写错了,直接使用3.即可,而你如果不单单是修改注释这么简单,还想git add其他文件作为这次commit,那么就需要2.

其他相关指令:

撤销上一次的commit和all changes

git reset --hard HEAD^

撤销上二次的commit和all changes

git reset --hard HEAD^^

情景4:rebase

git checkout mybranch

git rebase master

git checkout master

git merge mybranch

git fetch

git 放弃本地修改,强制拉取更新

git fetch --all
git reset --hard origin/master
git pull //可以省略

git fetch 指令是下载远程仓库最新内容,不做合并 
git reset 指令把HEAD指向master最新版本

git 不放弃本地修改,并且拉取更新

1、先将本地修改存储起来

$ git stash

这样本地的所有修改就都被暂时存储起来 。是用git stash list可以看到保存的信息:

git stash暂存修改

其中stash@{0}就是刚才保存的标记。

2、pull内容

暂存了本地修改之后,就可以pull了。

$ git pull

3、还原暂存的内容

$ git stash pop stash@{0}

问题:设置:GitLab and SSH keys

出现问题:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/home/wcg/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/wcg/.ssh/id_rsa": bad permissions
git@gitlab.liebaopay.com's password:

错误原因: /home/wcg/.ssh/id_rsa 权限设置的不对

解决办法:更改权限设置入下图所示

chmod 600 id_rsa

git命令(9): 常见问题cover的更多相关文章

  1. git 命令使用常见问题

    查看远端地址 git remote –v 查看配置 git config --list git status git add . // 暂存所有的更改 git checkout . // 丢弃所有的更 ...

  2. hg和git命令对照表

    hg和git命令对照表 来源 https://github.com/sympy/sympy/wiki/Git-hg-rosetta-stone Git hg rosetta stone   muxat ...

  3. 源代码管理之Git命令的使用

    目录 02.源代码管理之Git命令的使用 2.Git命令行演练-个人开发 2.1 如何学习git指令 2.2 初始化创建本地仓库 2.3 个人开发基本演练 2.4 Git的基本常识 3.Git命令行演 ...

  4. Git 使用心得 & 常见问题整理

    开源Linux 回复"读书",挑选书籍资料~ Git 流程图 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remot ...

  5. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  6. 工作中常用的git命令

    一 常用Git命令 git clone:(区分SSH or HTTP) git init:初始化仓库 二 Git命令详解 Git Bash下,cd /c git clone,从远程Git版本库克隆一份 ...

  7. 常用 Git 命令清单

    我每天使用 Git ,但是很多命令记不住. 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下 ...

  8. 常look的Git命令

    常用的Git命令   命令  简要说明 git add 添加至暂存区 git add–interactive 交互式添加 git apply   应用补丁 git am  应用邮件格式补丁 git a ...

  9. ***Linux下使用git命令及github项目

    在linux下搭建git环境1.创建Github账号,https://github.com2.Linux创建SSH密钥: ssh-keygen  ##一直默认就可以了 3.将公钥加入到Github账户 ...

  10. 我所记录的git命令(非常实用)

    一.前言 记录一下工作中常用到的git命令,只是简单的笔记,欢迎大家交流... [ 顺便问下园友们,怎么感觉博客园发布的博客搜索有时都搜不到,后台编辑能填的都填写了,还是觉得搜索排名不高? 相同的标题 ...

随机推荐

  1. ELK 实现 Java 分布式系统日志分析架构

    日志是分析线上问题的重要手段,通常我们会把日志输出到控制台或者本地文件中,排查问题时通过根据关键字搜索本地日志,但越来越多的公司,项目开发中采用分布式的架构,日志会记录到多个服务器或者文件中,分析问题 ...

  2. flex水平垂直居中

    <div class="parent"> <div class="children">我是通过flex的水平垂直居中噢!</div ...

  3. windows7下安装apache+PHP5.3

    Apache+PHP 安装与配置 最近在学习PHP,所以就在windows7下安装了PHP的开发环境.之所以没有选择集成的软件,如WAMP.AppServ等套件,是为了单独安装这些软件,有助于更加深入 ...

  4. 采集并分析Nginx访问日志

    日志服务支持通过数据接入向导配置采集Nginx日志,并自动创建索引和Nginx日志仪表盘,帮助您快速采集并分析Nginx日志. 许多个人站长选取了Nginx作为服务器搭建网站,在对网站访问情况进行分析 ...

  5. Java容器集合类的区别用法

    Set,List,Map,Vector,ArrayList的区别 JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└ ...

  6. Swift3 获取系统音量和监听系统音量

    使用时: //定义滑动条用于显示音量 @IBOutlet weak var volumSlider: UISlider! //处理声音,获取当前音量,并添加监听 handleVolum() 方法内容: ...

  7. oracle安装后listener.ora文件

    # listener.ora Network Configuration File: D:\Develop\oracle11g\product\11.2.0\dbhome_1\network\admi ...

  8. ubuntu 连接windows远程桌面 &&rdesktop 退出全屏模式

    参考:http://www.asgone.net/ubuntu-connect-windows-remote-desktop/ 呵呵,使用上了ubuntu,怎么接连上我的服务器的远程桌面呢,找了找帮助 ...

  9. IO 多路复用是什么意思?

    在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流, (学过EE的人现在可以站出来义正严辞说这个叫“时分复用”了). 什么,你还没有搞懂“一个请求到来了,nginx使用epoll接收请求的过 ...

  10. 进阶之路(基础篇) - 004 I/O的模拟量输出

    /********************************* 代码功能:某输出模拟量 使用函数: analogWrite(引脚号,模拟量); //调用8位AD 创作时间:2016*10*08 ...