2018-05-19 10:35:36 Lxy_Python 阅读数 293
  • Git入门基础

    Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。如今,越来越多的项目采用 Git 来管理项目开发,可见Git软件学习的重要性。但是,在学习的过程中,我们会发现初学者很难找到一个由浅入深,学完后能立刻上手的Git教程。本课程,我将带你通过浅显易懂的方式掌握Git的基本命令使用。

    35997 人正在学习 去看看 Chivalrous

分支管理

1.合并与删除分支

例如:分支master  dev

1. 新建一个分支 $git branch dev

2. 切换分支 $git checkour dev

3. (1,2)可以合并为 $git checkout -b dev

4. 查看当前分支$git branch

*dev

branch  (会列出所有分支,在当前分支前有*)

5. 对文件做一些修改,然后提交。(当前分支为dev

6. 切换回master分支$git checkout master

7. master分支上可以看到对文件所做的修改不存在。

8. dev分支工作成果合并到master$git merge dev   merge命令用于将指定分支合并到当前分支

9. 合并后可以删除dev分支 $git branch -d dev

10. 删除后查看branch ,只剩下master分支了。

 

查看分支(本地) git branch    git branch -r(远程) git branch -a(本地和远程)

创建分支 git branch 分支名

删除分支(本地) git branch -d 分支名   

删除远程分支 

$ git push origin --delete [branch-name]

$ git branch -dr [remote/branch]

切换分支 git checkout 分支名

创建+切换 git checkout -b 分支名

分支合并到当前分支 git merge 分支名

 

2. 解决冲突

新建一个分支feature1

f分支里将test.py 文件修改,提交

切回master分支,修改test.py,提交

 

使用merge  $git merge feature1 合并

快速合并发生冲突

 

进行修改后,保存再提交。

 

git 无法自动合并分支时,必须先解决冲突,再提交,合并完成

git log --graph 命令可以看到分支合并图。

 

 

3. 分支管理策略

fast foeward 模式,在删除分支后,会丢掉分支信息

禁用ff模式后,提交时会产生一个commit信息,这样从分支历史上可以查看出历史信息

 

1.新建一个dev分支,修改文件并提交。

2.切换回master分支

3.合并分支$git merge --no-ff -m”merge dev master”  dev

4.这样可以用 git log 查看历史  $git log --graph  --pretty=oneline   --abbrev-commit

 

3.1分支策略

开发过程中,每个人都有自己的分支,自己提交到dev分支中。版本发布时,再将dev提交到master

 

4. Bug分支

1.要创建一个新的分支修改一个bug ,但当前分支没有提交。

2.$git stash 将当前分支(dev)‘隐藏’起来,等恢复现场后继续工作。

3.确定要在哪个分支上修复,(当前在dev分支工作)假定在master分支上建立临时分支

 $git checkout master

 $git checkout -b issue-001

4. 现在修改bug,然后提交

5. 完成后切回mastermerge合并。$git merge --no-ff -m “merge in master” 

删除issue-001分支

6. 修复完bug,回到dev分支

7. 刚才工作现场‘隐藏’到哪去了。用$git stash list 还在,只是存在某个地方了

8. 两种恢复方法$git stash apply 但恢复后stash内容不删除,你可以用$git stash drop 删除

9. $git stash pop 恢复的同时把stash内容删除了

10. 你可以多次stash ,恢复时先用git stash list 查看,再恢复指定stash $git stash apply stash@{0}

11. 

 

5. Feature 分支

开发一个新功能,在feature-vulcan分支上

1. 新建$git checkout -b feature-vulcan  开发完后提交。切回dev,准备合并,删除

2. 突然改计划,销毁此分支

3. $git checkout -d feature-vulcan  Git提示失败,因为还没有合并,若删除将丢掉修改。

4. 强制删除$git branch -D feature-vulcan

6. 多人合作

查看远程库信息$git remote

$git remote -v   (可以看到详细的抓取和推送的origin地址)

$git remote remove 库名  (删除本地库)

6.1推送分支  

$git push -u 本地库(可选) 本地分支(可选)

例:$git push -u origin master

 master:主分支

 dev:工作分支

 bug:不用提交,在本地修改

 feature:是否提交取决于,是否和小伙伴合作在上面开发

6.2抓取分支

现在模拟一个新的电脑(注意要把SSH key添加到github中),或在同一个电脑的另一个目录克隆

$git clone git@github.com:123lxy/Desktop.git

默认情况下克隆后只能看到master分支

1. 现在要在新的dev分支上开发

创建$git checkout -b dev origin/dev

现在可以在dev分支上修改,提交,push

2. 其他人已经修改,将origin/dev 分支推送了提交,碰巧我也对文件做了修改,并试图push

失败了,因为冲突。

git pull 把最新的提交从origin/dev抓下来,然后在本地合并,解决冲突,再推送。

3. git pull失败了因为没有指定本地dev与远程origin/dev的链接

 $git branch --set-upstream dev origin/dev

 pull,成功了。

4. 但合并有冲突,需要手动解决和 六(2)解决冲突一致。

5. 解决后,提交,push

 

1.$git remote -v 查看远程库信息

2.本地推送git push origin branch-name ,失败就git pull抓取远程新提交

3.在本地创建和远程对应的的分支git checkout -b branch-name origin/branch-name(本地和远程名最好一致)

4.建立本地分支和远程分支的关联git branch --set-upstream branch-name origin/branch-name

5.从远程抓取分支用git pull ,若有冲突,先处理冲突


2019-09-16 08:59:29 ywmxyz123456 阅读数 389
  • Git入门基础

    Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。如今,越来越多的项目采用 Git 来管理项目开发,可见Git软件学习的重要性。但是,在学习的过程中,我们会发现初学者很难找到一个由浅入深,学完后能立刻上手的Git教程。本课程,我将带你通过浅显易懂的方式掌握Git的基本命令使用。

    35997 人正在学习 去看看 Chivalrous

遇到一个问题,主要是idea创建分支,linux已经有这个项目,但是没有分支,现在是需要拉取分支并且启动

1.linux查询分支请求

  1. git branch 查看当前git本地厂库有那些分支
  2. git branch -a 查看git线上分支都有哪些

2.拉取分支

 拉取分支有2中方式,我也是参考其他说明,并附上自己的实操

     1. git fetch origin dev

拉取分支到本地厂库

      2.git checkout -b LocalDev origin/dev

拉取分支到本地厂库,并且切换分支

下面是我实际查询分支情况

下面是我拉取并切换线上分支

至此已经大功告成

其中还遇到其他小问题,就是有部分配置文件直接在linux上修改文件,导致拉取失败

一般这种情况,

1. git log 查看版本情况,可以恢复到上个版本

这个就自己可以查看其他人的博客

2. 对具体某个文件进行恢复,即重新拉取文件

我遇到情况是这个文件被改动,执行下面语句,重新拉取了这个文件,在执行拉取新分支到本地命令

git checkout -- src/main/webapp/login.jsp

 

 

2017-07-17 23:27:38 baidu_35692628 阅读数 229
  • Git入门基础

    Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。如今,越来越多的项目采用 Git 来管理项目开发,可见Git软件学习的重要性。但是,在学习的过程中,我们会发现初学者很难找到一个由浅入深,学完后能立刻上手的Git教程。本课程,我将带你通过浅显易懂的方式掌握Git的基本命令使用。

    35997 人正在学习 去看看 Chivalrous

序言

才开始使用github不久,记录一些基本的常用操作

查看/新建/增删本地分支和远程分支

  • 查看本地和远程所有分支

    • git branch -a
  • 查看本地分支

    • git branch
  • 查看远程分支

    • git branch -r
  • 新建新分支newbranch

    • git branch newbranch
  • 切换到新建分支

    • git checkout newbranch
  • 将新建的本地分支push到远程分支(remotes/origin下)

    • git push origin newbranch
  • 新建远程分支后,别人可以通过以下命令将远程分支拉取到本地

    • git fetch origin newbranch:local_dev
    • local_dev为本地新创建的分支
    • 或者别人先新建本地分支:git branch local_dev
    • 切换到本地新分支下:git checkout local_dev
    • 再将远程分支拉取到本地:git fetch origin newbranch
  • 删除本地分支

    • git branch -d newbranch
    • 删除完通过命令查看本地分支:git branch -a
  • 删除远程分支

    • git push origin –delete develop
    • 删除完通过命令查看远程分支:git branch -a


更新远程分支

  • 查看远程分支(remotes/origin的)

    • git branch -a
  • 切换到对应分支(以newbranch为例)

    • git checkout newbranch
  • 更新所有文件

    • git add .
    • git commit -a -m “此处为对更新的说明”
    • git push origin newbranch
  • 更新单个文件

    • git status //查看修改过的文件
    • git add filename
    • git commit -m “此处为对更新的说明”
    • git push origin newbranch



Acknowledgements:
http://blog.csdn.net/u013474436/article/details/51287128
http://blog.csdn.net/smy_yu/article/details/9469987

2017.07.17
2018.05.31

2019-12-24 23:10:47 Powerful_Fy 阅读数 335
  • Git入门基础

    Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。如今,越来越多的项目采用 Git 来管理项目开发,可见Git软件学习的重要性。但是,在学习的过程中,我们会发现初学者很难找到一个由浅入深,学完后能立刻上手的Git教程。本课程,我将带你通过浅显易懂的方式掌握Git的基本命令使用。

    35997 人正在学习 去看看 Chivalrous

git本地仓库分支管理

查看分支:

[root@linux ~]# cd /data/git2/
[root@linux git2]# git branch 
* master
[root@linux git2]# ls
a.log

#当前分支下存在a.log文件

创建分支:

[root@linux git2]# git branch test

切换分支:

[root@linux git2]# git checkout test 
切换到分支 'test'
[root@linux git2]# git branch 
  master
* test
[root@linux git2]# ls
a.log

#前面的*号表示当前所在分支,新建的分支会包含master分支的文件,因为该分支是在master下创建

在test分支创建的文件提交本地仓库后不会在master分支显示:

[root@linux git2]# echo "1" > a.txt
[root@linux git2]# git add a.txt
[root@linux git2]# git commit -m "add a.txt"
[root@linux git2]# ls
a.log  a.txt
[root@linux git2]# git checkout master 
切换到分支 'master'
[root@linux git2]# ls
a.log

合并分支:

[root@linux git2]# git checkout master 
切换到分支 'master'
[root@linux git2]# git merge test 
Merge made by the 'recursive' strategy.
 a.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt

#将test分支合并到master,需要先切换到master分支

合并后即可显示test分支创建的文件:

[root@linux git2]# ls
a.log  a.txt

合并后继续在test分支下修改a.txt,可以再次合并将更新后的文件同步到master分支:

[root@linux git2]# git checkout test 
切换到分支 'test'
[root@linux git2]# echo "123" >> a.txt 
[root@linux git2]# git add a.txt
[root@linux git2]# git commit -m "ch"
[test 4ae67ad] ch
 1 file changed, 1 insertion(+)
[root@linux git2]# git checkout master 
切换到分支 'master'
[root@linux git2]# git merge test 
Merge made by the 'recursive' strategy.
 a.txt | 1 +
 1 file changed, 1 insertion(+)
[root@linux git2]# ls
a.log  a.txt
[root@linux git2]# cat a.txt 
1
123

但是当两个分支分别对a.txt文件修改了不同的内容时,合并就会冲突:

[root@linux git2]# echo "aaa" >> a.txt 
[root@linux git2]# git add a.txt
[root@linux git2]# git commit -m "ch"
[master 81e7666] ch
 1 file changed, 1 insertion(+)
[root@linux git2]# git checkout test 
切换到分支 'test'
[root@linux git2]# echo "bbb" >> a.txt 
[root@linux git2]# git add a.txt
[root@linux git2]# git commit -m "ch"
[test 48b6f53] ch
 1 file changed, 1 insertion(+)
[root@linux git2]# git checkout master 
切换到分支 'master'
[root@linux git2]# git merge test 
自动合并 a.txt
冲突(内容):合并冲突于 a.txt
自动合并失败,修正冲突然后提交修正的结果。
[root@linux git2]# cat a.txt 
1
123
<<<<<<< HEAD
aaa
=======
bbb
>>>>>>> test

#两个分支的不同会在<<<<<<< HEAD和>>>>>>> test之间显示,而<<<之前或>>>之后的部分是两个分支都相同的地方,处理冲突的方法:当master分支的新内容aaa被需要时,将master分支的a.txt文件添加一行bbb后再合并,如果aaa是不需要的内容,可以直接将a.txt文件内容改为与test分支的a.txt文件内容相同即可解决合并的冲突

注意:合并分支有一个原则,那就是要把最新修改的分支合并到旧的分支,也就是说merge后面跟的分支名字一定是最新修改过的分支

删除分支:

[root@linux git2]# git branch -d test 

如果分支未合并,使用 -D参数强制删除:

[root@linux git2]# git branch -D test 

补充:
1.master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上
2.创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master
3.开发人员应该在dev的基础上再分支成个人分支,在自己的个人分支里面编写代码,然后合并到dev分支

GitHub远程分支管理

当前GitHub仓库中有两个分支master和dev:
在这里插入图片描述
克隆GitHub仓库到本地:

[root@linux ~]# cd /data/
[root@linux data]# git clone git@github.com:AsnFy/git_test.git

查看GitHub远程仓库上的所有分支:

[root@linux data]# cd git_test/
[root@linux git_test]# git ls-remote origin 
d18f952dd7450648f97b4d79c71c6cf9af235798	HEAD
d18f952dd7450648f97b4d79c71c6cf9af235798	refs/heads/dev
d18f952dd7450648f97b4d79c71c6cf9af235798	refs/heads/master

查看本地仓库分支:

[root@linux git_test]# git branch 
* master

#git clone默认只克隆master分支,如果想把所有分支都克隆下来,需要手动创建

在本地创建和远程分支对应的分支,分支名需对应:

[root@linux git_test]# git checkout -b dev origin/dev
分支 dev 设置为跟踪来自 origin 的远程分支 dev。
切换到一个新分支 'dev'
[root@linux git_test]# git branch 
* dev
  master

在dev分支创建新文件:

[root@linux git_test]# echo "test" > 1.txt
[root@linux git_test]# git add 1.txt
[root@linux git_test]# git commit -m "add 1.txt"

推送到GitHub:

[root@linux git_test]# git push

查看GitHub仓库:
在这里插入图片描述
#新文件已显示在dev分支中

注意:git push 命令是推送所有分支到GitHub,如果只想推送单个分支(dev),使用:git push origin dev

在本地创建的分支,远程仓库没有时,使用git push也不会推成功,需要单独指定:

[root@linux git_test]# git branch dev2
[root@linux git_test]# git checkout dev2

#新建本地分支dev2

推送到远程仓库:

[root@linux git_test]# git push origin dev2

#如果推送失败,先执行git pull抓取远程仓库新提交的文件

查看GitHub:
在这里插入图片描述
#dev2分支已显示

git标签管理

给master分支创建标签:

[root@linux git_test]# git checkout master 
切换到分支 'master'
[root@linux git_test]# git tag v1.0

查看所有标签:

[root@linux git_test]# git tag 
v1.0

查看标签信息:

[root@linux git_test]# git show v1.0 
commit d18f952dd7450648f97b4d79c71c6cf9af235798
Author: AsnFy <32299414+AsnFy@users.noreply.github.com>
Date:   Tue Dec 24 20:53:54 2019 +0800

    Create README.md

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..1e523a5
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# git_test

tag是针对commit来打标签的,所以可以针对历史的commit来打tag,查看历史的commit:

[root@linux git_test]# git log --pretty=oneline --abbrev-commit 
d18f952 Create README.md
f460772 Create abc.sh
2b99b7b add file 1.txt

针对历史commit打标签:

[root@linux git_test]# git tag v0.9 f460772

还可以使用-m参数添加标签的描述:

[root@linux git_test]# git tag -a v0.1 -m "first tag" 2b99b7b

描述会在标签的详情中显示:
在这里插入图片描述
删除指定标签:

[root@linux git_test]# git tag -d v0.1

推送所有标签到远程仓库:

[root@linux git_test]# git push --tags origin 
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:AsnFy/git_test.git
 * [new tag]         v0.9 -> v0.9
 * [new tag]         v1.0 -> v1.0

查看GitHub:
在这里插入图片描述
#标签已显示

推送单个标签到远程仓库:

[root@linux git_test]# git push origin v1.0

如果本地删除了一个标签v1.0,也需要删除远程仓库标签:

[root@linux git_test]# git push origin :refs/tags/v1.0

通过git show tagname查看标签信息中的commit,即可使用git reset --hard xxxxx恢复该标签对应的版本

设置git命令别名

git中所有命令都支持设置别名,使命令可以简写,提高使用效率

设置branch命令别名为b:

[root@linux git_test]# git config --global alias.b branch
[root@linux git_test]# git b
  dev
  dev2
* master

设置checkout命令别名为c:

[root@linux git_test]# git config --global alias.c checkout
[root@linux git_test]# git c dev
切换到分支 'dev'

查看git别名使用命令:

[root@linux git_test]# git config --list |grep alias
alias.b=branch
alias.c=checkout

也可以通过用户目录下的隐藏文件.gitconfig查看:

[root@linux git_test]# cat /root/.gitconfig 
[user]
	email = zhangsan@test.com
	name = zhangsan
[alias]
	b = branch
	c = checkout

取消别名:

[root@linux git_test]# git config --global --unset alias.b

补充:日志别名

[root@linux git_test]# git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

查看日志:

[root@linux git_test]# git lg
* 103fd08 - (HEAD, origin/dev2, origin/dev, dev2, dev) add 1.txt (76 分钟之前) <zhangsan>
* d18f952 - (tag: v1.0, origin/master, origin/HEAD, master) Create README.md (66 分钟之前) <AsnFy>
* f460772 - (tag: v0.9) Create abc.sh (30 小时之前) <AsnFy>
* 2b99b7b - add file 1.txt (30 小时之前) <zhangsan>

#从左到右分别是commit、描述、时间、操作用户

git服务器搭建

在服务端安装git:

[root@linux02 ~]# yum -y install git

创建git用户:

[root@linux02 ~]# useradd git -s /usr/bin/git-shell

#指定shell为了避免该用户远程登录服务器

在git用户家目录创建authorized_keys文件,用于存储客户端公钥:

[root@linux02 ~]# cd /home/git/
[root@linux02 git]# mkdir .ssh
[root@linux02 git]# touch .ssh/authorized_keys
[root@linux02 git]# chown -R git.git .ssh/
[root@linux02 git]# chmod 600 .ssh/authorized_keys 

创建git仓库目录:

[root@linux02 git]# mkdir /data/gitroot

初始化仓库:

[root@linux02 gitroot]# git init --bare test.git

#bare选项会创建一个裸仓库test.git,裸仓库没有工作区,因为服务器上的git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的git仓库通常都以.git结尾

更改所属主/组为git:

[root@linux02 gitroot]# chown -R git:git test.git/

#git服务器已搭建完成

在客户端生成秘钥:

[root@linux ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:i84mpMSKfrLMFT1xndEO14Zj/Jms9ss/JRjOJYhbOrg root@linux
The key's randomart image is:
+---[RSA 2048]----+
|         .o o    |
|        ..oB o   |
|     . . +=.= o  |
|    . o . o.o=.  |
| . . o .S+ o.=   |
|  o o o.+. o+ . .|
|.o +  ..... .  ..|
|=.o..oE     .. . |
|.=+  oo      oo..|
+----[SHA256]-----+

将公钥的内容添加到客户端的/home/git/.ssh/authorized_keys文件中:

[root@linux ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDxobP7gsY9dVH8QtZnhLVlBO74YFE7vyyt6iG2udFqOnQkT9seb6CCNjxjkKk+ky0Rp/oQ8xlXnLEEF5yrwY7MxT3xp2F5J/2Qi3ChciV1NCbLTTyfsDZ7KiYLia98RFfTAjPH0+NbHmmNqD82QnDzsyEXZ9xG7E7+u15IkgNePwT9raeyOo+E4mGIm3a1XrgijqZqUDC5NeFGAPpXGydmjzobLS/VCHGSdHTRHeEGaTIh/fzypLkImJi81jg1Kn2lD9ktTKGYFO+62GJ8o1JvG2M5RYQ6xjs/fPiHsLzJ0yA84Hu+TpH1cSzPezYP3pCDlj23J11D+VtRBGSg/pV9 root@linux

克隆远程仓库到客户端:

[root@linux ~]# git clone git@192.168.234.130:/data/gitroot/test.git

创建新文件:

[root@linux ~]# cd test/
[root@linux test]# git branch 
[root@linux test]# echo "12345" > 1.txt
[root@linux test]# git add 1.txt
[root@linux test]# git commit -m "add 1.txt"
[master(根提交) 2674040] add 1.txt
 1 file changed, 1 insertion(+)
 create mode 100644 1.txt

推送到git服务器:

[root@linux test]# git push origin master 
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.234.130:/data/gitroot/test.git
 * [new branch]      master -> master

#第一次推送需要指定分支名称,因为git服务器是空的,还没有分支,之后推送master分支下的新文件直接git push即可

换个目录再次克隆git服务器的远程仓库:

[root@linux test]# cd /home/
[root@linux home]# git clone git@192.168.234.130:/data/gitroot/test.git

客户端推送到git服务器的文件已显示:

[root@linux home]# ls test/
1.txt
[root@linux home]# cat test/1.txt 
12345
2018-08-20 14:30:31 qq_27276951 阅读数 1760
  • Git入门基础

    Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。如今,越来越多的项目采用 Git 来管理项目开发,可见Git软件学习的重要性。但是,在学习的过程中,我们会发现初学者很难找到一个由浅入深,学完后能立刻上手的Git教程。本课程,我将带你通过浅显易懂的方式掌握Git的基本命令使用。

    35997 人正在学习 去看看 Chivalrous

不怎么接触linux命令,随手记录下:

一、查看分支命令:git branch

进入到相应的目录下,查看这个模块的分支:

二、更新分支:git fetch

三、查看分支是否更新:git branch

四、切换并更新分支:git checkout 分支名

五、可以再查看下分支是否切换成功:git branch

linux git分支使用

阅读数 26

Git切换分支

阅读数 83

没有更多推荐了,返回首页