码迷,mamicode.com
首页 > 其他好文 > 详细

git管理(非常杂乱)

时间:2018-11-25 20:33:46      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:可见   commit   new t   mat   vpd   shadow   版本   命令别名   mon   

git分支管理

git branch ?查看分支 ??
git branch newch ?创建新的分支,创建后查看新的分支

[root@nfs1 monice]# git branch newch
[root@nfs1 monice]# git branch
* master
  newch

git checkout newch ?切换分支到newch下,切换分支后再使用git branch查看到分支已经切换到了newch下

[root@nfs1 monice]# git checkout newch
Switched to branch ‘newch‘
[root@nfs1 monice]# git branch
  master
* newch

在新的分支下创建新的文件并提交到git,再切换到master分支,查看相同的文件并没有发生任何更改
首先在master分支下查看2.txt的内容,分支master中的内容是123456

[root@nfs1 monice]# cat 2.txt 
123456 

然后切换到创建的新版本当中,创建新的内容到文件中,提交更改到git中。并再次切换到master分支中

[root@nfs1 monice]# git checkout newch
Switched to branch ‘newch‘
[root@nfs1 monice]# echo "123456 " > 2.txt
[root@nfs1 monice]# git add 2.txt 
[root@nfs1 monice]# git commit -m "12345"
[master 6dbc773] 12345
 1 file changed, 1 insertion(+)
 create mode 100644 2.txt

查看newch分支中的2.txt内容和master中的2.txt内容,可以了解到git分支之间是分隔开来的,各自分支改动不会影响到其他分支

[root@nfs1 monice]# git branch
* master
  newch
[root@nfs1 monice]# cat 2.txt 
123456
-----------------------分支master中的2.txt内容
[root@nfs1 monice]# git checkout newch
Switched to branch ‘newch‘
[root@nfs1 monice]# git branch
  master
* newch
-----------------------分支newch中的2.txt内容
[root@nfs1 monice]# cat 2.txt 
123456 
123456 

分支的合并
合并之前首先切换到要合并的分支下,把被合并分支进行合并变更
切换到master分支,并把newch分支合并到master分支下,并查看2.txt合并后的内容

[root@nfs1 monice]# git checkout master
Switched to branch ‘master‘
[root@nfs1 monice]# git merge newch
Auto-merging 2.txt
CONFLICT (add/add): Merge conflict in 2.txt
Automatic merge failed; fix conflicts and then commit the result.
[root@nfs1 monice]# cat 2.txt 
<<<<<<< HEAD
123456
=======
123456 
123456 
>>>>>>> newch

如果master分支和newch的分支都对2.txt进行了编辑,当合并的时候会提示冲突,需要解决冲突后才能合并分支
解决分支冲突的 方法是在master分支下编辑2.txt,改为对方分支newch中的2.txt相同的内容,然后提交,再合并分支

如果更新master分支遇到这个分支是想要的结果,另一个newch分支是不想要的内容,但由于两个分支内容的不同,导致切换不到newch分支当中,这种情况下我们可以在当前master分支修改并提交git,再切换到newch分支下,把master分支合并到newch分支下即可
合并分支有一个原则,那就是把最新的分支合并到旧的分支,也就是说merge后面分支名字一定是最新的分支

git branch -d ?分支名称 ? //删除分支

[root@nfs1 monice]# git branch
* master
  newch
[root@nfs1 monice]# git branch -d newch
Deleted branch newch (was 3bc8b02).
[root@nfs1 monice]# git branch
* master

强制删除没有合并的分支,创建新分支list,并在分支内创建新的文件及内容。然后使用branch -D 来强制删除

[root@nfs1 monice]# git branch list
[root@nfs1 monice]# git checkout list
Switched to branch ‘list‘
[root@nfs1 monice]# echo "1234565778" > 23.txt
[root@nfs1 monice]# git checkout master
Switched to branch ‘master‘
[root@nfs1 monice]# git branch -D list
Deleted branch list (was 4f122c3).
[root@nfs1 monice]# git branch
* master ? ? ? ? ? ? ? ? ? --------------------强制删除后只剩下一个分支

远程分支管理

技术分享图片
对于分支应用原则
master分支是非常重要的,线上代码发布使用这个分支,平时开发代码不要在这个分支上
创建一个dev分支,专用作于开发,只有当发布到线上之前,才会把dev分支合并到master中
开发人员应该在dev的基础上再分支成个人分支,个人分支(自己pc中)里开发代码。然后合并到dev分支当中

dev分支合并bob分支的命令
git checkout dev ?先切换到dev分支,然后合并bob
git merge bob

拉取远程分支
本地分支如果不推送到远程,那么自己本地分支是对其他人不可见的
查看远程上的分支,可以看到所有分支

[root@nfs1 monice]# git ls-remote origin
4f122c38f59a2844cad0ecda1397e3d89e15cca9    HEAD
4f122c38f59a2844cad0ecda1397e3d89e15cca9    refs/heads/dev
4f122c38f59a2844cad0ecda1397e3d89e15cca9    refs/heads/master

拉取远程dev分支并增加一个文件,再推送dev分支的更新
切换到远程的dev分支下,并查看当前所在分支

[root@nfs1 monice]# git checkout -b dev origin/dev
Branch dev set up to track remote branch dev from origin.
Switched to a new branch ‘dev‘
[root@nfs1 monice]# git branch
* dev
  master

更新文件到远程新分支下
创建一个文件,并更新至远程dev分支

[root@nfs1 monice]# echo "vu==dgfdhg" > linux.txt
[root@nfs1 monice]# git add linux.txt 
[root@nfs1 monice]# git commit -m "ceshi file linux.txt"
[dev 0ee9472] ceshi file linux.txt
 1 file changed, 1 insertion(+)
 create mode 100644 linux.txt
[root@nfs1 monice]# git push
Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 514 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To git@github.com:hanxiang233/monice.git
 ? 3314ca3..8d7b993 dev -> dev

当更新遇到错误提示,这是因为远程的github文件变动没有同步到当前本地,需要先git pull拉下所有更新。提示信息如下:

[root@nfs1 monice]# git push
To git@github.com:hanxiang233/monice.git
 ! [rejected] dev -> dev (fetch first)
error: failed to push some refs to ‘git@github.com:hanxiang233/monice.git‘
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first merge the remote changes (e.g.,
hint: ‘git pull‘) before pushing again.
hint: See the ‘Note about fast-forwards‘ in ‘git push --help‘ for details.

使用git pull更新后就可以继续git push了

 ----------------------------------git pull下拉更新
[root@nfs1 monice]# git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
Unpacking objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
From github.com:hanxiang233/monice
 ? 4f122c3..3314ca3 dev -> origin/dev
Merge made by the ‘recursive‘ strategy.
 monice.txt | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 monice.txt

 ----------------------------------git push
[root@nfs1 monice]# git push
Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 514 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To git@github.com:hanxiang233/monice.git
 ? 3314ca3..8d7b993 dev -> dev

git push的两种情况
只更新一个分支
当本地分支和远程分支一致时
git push会把本地分支的变更一同推送到远程,如果想只推送一个分支更新,使用git push origin branch-name
当两个本地和远程的两个分支都有变更。这时候使用git pull推送时会更新所有分支,如果想要推送指定分支,则需要指定明确需要推送的分支
在dev分支下创建一个文件,然后只推送dev这一个分支更新:

[root@nfs1 monice]# touch 123345.txt
[root@nfs1 monice]# git add 123345.txt 
[root@nfs1 monice]# git commit -m "filess"
[dev 32af6e6] filess
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 123345.txt
[root@nfs1 monice]# git push origin dev
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 263 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To git@github.com:hanxiang233/monice.git
 ? 8d7b993..32af6e6 dev -> dev

将新本地分支更新到远程上
首先创建一个新分支,创建一个新的文件,然后将新建分支更新至git上。并在github上查看分支更新结果

[root@nfs1 monice]# git checkout dev2
Switched to branch ‘dev2‘
------------------------创建分支文件
[root@nfs1 monice]# echo "12345" > index.txt
[root@nfs1 monice]# git add index.txt 
[root@nfs1 monice]# git commit -m "index"
[dev2 1091eb5] index
 1 file changed, 1 insertion(+)
 create mode 100644 index.txt
 -----------------------push新分支到git
[root@nfs1 monice]# git push origin dev2
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 266 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote: 
remote: Create a pull request for ‘dev2‘ on GitHub by visiting:
remote: https://github.com/hanxiang233/monice/pull/new/dev2
remote: 
To git@github.com:hanxiang233/monice.git
 * [new branch] dev2 -> dev2

查看github上更新上传的分支
技术分享图片

git标签管理

标签管理类似于快照功能,可以给版本库打上一个标签,记录某个时刻库的状态,也可以随时恢复到该状态
标签是为了方便区分版本,方便版本管理
给一个分支打上标签
给分支打上标签并查看所有标签,和某个标签的详细信息

----------------切换到分支中,然后给当前分支打上标签
[root@nfs1 monice]# git checkout master
Switched to branch ‘master‘
[root@nfs1 monice]# git tag v1
----------------查看所有标签
[root@nfs1 monice]# git tag
v1
-----------------查看标签详细信息
[root@nfs1 monice]# git show v1
commit 4f122c38f59a2844cad0ecda1397e3d89e15cca9
Author: Your Name <you@example.com>
Date: Sat Nov 24 16:11:08 2018 +0800
?
 ?  newch
?
diff --git a/2.txt b/2.txt
index a29acaf..28d9555 100644
--- a/2.txt
+++ b/2.txt
@@ -1,7 +1,8 @@
 <<<<<<< HEAD
 123456
 222222
-=======
+======
+3545<F3>=
 123456 
 123456 
 >>>>>>> newch

针对commit打标签
tag是针对commit打标签的,所以可以针对历史commit来打标签
首先查看历史commit记录(每次commit的记录),再针对某个历史commit打上标签
历史commit

[root@nfs1 monice]# git log --pretty=oneline
4f122c38f59a2844cad0ecda1397e3d89e15cca9 newch
5d2b10e87a8a32f8e28f648528e39419f5b785f6 2222
6dbc773b363afd438e8e7155647a2ce2f1efdf8f 12345
3bc8b0298eba9b921fe0c25631e423456cbf5c8e 123456
7b6954b358a3a3b0ea45eca870da005c7b980bb3 123456
2390d8e468434a02895d4dbdf9e59a47239c9245 new shell
5ac93e949773f681ee78b1f32d27da9db2f98a3d first commit

将某个commit打上标签

[root@nfs1 monice]# git tag v0.8 3bc8b0298eba ? ?

对标签添加描述信息
对一个标签添加描述信息,并测试删除该标签
git tag -d tagID 删除标签

[root@nfs1 monice]# git tag -a v0.1 -m "tag just 0.1" 2390d8e
[root@nfs1 monice]# git tag -d v0.1
Deleted tag ‘v0.1‘ (was a55a8c5)
[root@nfs1 monice]# git tag
v0.8
v1

对远程的git推送标签
推送指定标签

[root@nfs1 monice]# git push origin v0.8
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:hanxiang233/monice.git
 * [new tag] v0.8 -> v0.8

查看远程的git标签
技术分享图片

对远程推送所有标签
将本地创建的所有标签都push到git远程上

[root@nfs1 monice]# git push --tag origin
Counting objects: 3, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 416 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:hanxiang233/monice.git
 * [new tag] v0.2 -> v0.2
 * [new tag] v0.3 -> v0.3
 * [new tag] v0.6 -> v0.6

再查看远程标签
技术分享图片

删除本地标签
首先查看所有标签,再删除本地的标签

---------删除本地标签
[root@nfs1 monice]# git tag
v0.2
v0.3
v0.6
v0.8
v1
[root@nfs1 monice]# git tag v0.2 -d
Deleted tag ‘v0.2‘ (was 6e95f24)
[root@nfs1 monice]# git tag v0.3 -d
Deleted tag ‘v0.3‘ (was 0e55601)
[root@nfs1 monice]# git tag v0.6 -d
Deleted tag ‘v0.6‘ (was 2e64833)
[root@nfs1 monice]# git tag v0.8 -d
Deleted tag ‘v0.8‘ (was 3bc8b02)
[root@nfs1 monice]# git tag v1 -d
Deleted tag ‘v1‘ (was 4f122c3)

删除远程标签
首先查看远程标签
技术分享图片

并查看删除后的远程git状态

[root@nfs1 monice]# git push origin :refs/tags/v1
To git@github.com:hanxiang233/monice.git
 - [deleted] v1
[root@nfs1 monice]# git push origin :refs/tags/v0.8
To git@github.com:hanxiang233/monice.git
 - [deleted] v0.8
[root@nfs1 monice]# git push origin :refs/tags/v0.6
To git@github.com:hanxiang233/monice.git
 - [deleted] v0.6
[root@nfs1 monice]# git push origin :refs/tags/v0.3
To git@github.com:hanxiang233/monice.git
 - [deleted] v0.3
[root@nfs1 monice]# git push origin :refs/tags/v0.2
To git@github.com:hanxiang233/monice.git
 - [deleted] v0.2

删除后远程git标签没有了
技术分享图片

git别名

使用别名可以提高工作效率
定义git命令别名
定义commit、checkout和branch的命令别名,操作过程如下:

[root@nfs1 monice]# git config --global alias.ci commit
[root@nfs1 monice]# git config --global alias.co checkout
[root@nfs1 monice]# git config --global alias.br branch

查看git别名使用的命令
不使用grep过滤出别名配置的话,会输出所有的git配置

[root@nfs1 monice]# git config --list |grep alias
alias.ci=commit
alias.co=checkout
alias.br=branch

取消git别名

git config --global --unset alias.br
[root@nfs1 monice]# git config --global --unset alias.br
[root@nfs1 monice]# git config --list |grep alias
alias.ci=commit
alias.co=checkout

配置文件
这些配置都是存储在gitconfig配置文件中的,配置文件再root目录下
用cat查看配置文件

[root@nfs1 monice]# cat /root/.gitconfig 
[user]
 email = you@example.com
 name = Your Name
[push]
 default = simple
[alias]
 ci = commit
 co = checkout

git管理(非常杂乱)

标签:可见   commit   new t   mat   vpd   shadow   版本   命令别名   mon   

原文地址:http://blog.51cto.com/8844414/2321694

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!