Git的基本使用

参考廖雪峰的git教程

git基本命令

账户设置

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

创建版本库

mkdir repositoryname
cd repositoryname
git init

版本库添加文件

git add test.txt test2.txt ...

git commit -m "comment"

查看当前仓库文件的状态

git status #查看文件修改信息
git diff #查看具体被修改的内容

版本回退

git log #显示从最近到最远的提交日志

注意,这里的commit idcommit a0869b995443875315c2e53cd73a3694df27f294不是自己commit的id,这样做是为了防止冲突

HEAD 表示当前版本,HEAD^上一个版本,HEAD^^ 上上一个版本,以此类推。
HEAD~2 == HEAD^^

git reset --hard HEAD^

git reset --hard commitID(不需要完整填写)

查看commitID

git reflog

缓存区与工作区

Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,
当执行git commit时,将暂存区的更改提交到工作区。

修改之后,直接git commit是不会把修改提交到工作区的,也就是说,每次修改,如果不add到暂存区,那就不会加入到commit中。

插销修改

git checkout -- file

命令git checkout – readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

删除文件

两种情况:

如果在文件管理器中删除了,这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了。

 rm test.txt
  1. 确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
  2. 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本
git checkout -- test.txt

远程仓库操作

远程仓库

  1. 可以自己搭建一个git 服务器
  2. 可以使用github免费的远程的仓库

关于github:传输使用的是SSH加密的。

  1. 创建ssh key
ssh-keygen -t rsa -C "youremail@example.com"
  1. 登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
  2. 在github 创建仓库
  3. 关联远程库
git remote add origin git@github.com:adamweixuan/repositoryname.git
  1. 推送master分支的所有内容
git push -u origin master
  1. 每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
git push origin master

克隆远程仓库

git clone git@github.com:adamweixuan/repositoryname.git

分支管理

分支概述

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

创建分支

图片来源 廖雪峰的官方博客

每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点:

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长.

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:

所以Git合并分支也很快!就改改指针,工作区内容也不变!

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:

实际操作

创建分支:

$ git checkout -b dev
M       test.txt
Switched to a new branch 'dev'

git checkout命令加上-b参数表示创建并切换,相当于以下两条命令

git branch dev
git checkout dev

查看分支:
git branch命令会列出所有分支,当前分支前面会标一个*号

$ git branch
* dev
  master

在分支上修改并提交:

切换到master分支:

$ git checkout master
Switched to branch 'master'

切换回master分支后,再查看一个test.txt文件,刚才添加的内容不见了!因为那个提交是在dev分支上,而master分支此刻的提交点并没有变:

合并分支:

git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。

$ git merge dev
Updating 5886d8d..cb3e4e9
Fast-forward
 test.txt | 4 ++++
 1 file changed, 4 insertions(+)
$ cat test.txt
This is a test file to git !

This is a another line !

second change

Creating a new branch is quick

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

删除分支:

$ git branch -d dev
Deleted branch dev (was cb3e4e9).

再次查看,只剩下master了

$ git branch
* master

解决冲突

  • 创建新的分支feature1
$ git checkout -b feature1
Switched to a new branch 'feature1'
  • 分支修改
修改最后一行为
Creating a new branch is quick & simple!

$ git add test.txt
  • 分支提交
$ git commit -m "& simple"
[feature1 0a8265e] & simple
 1 file changed, 1 insertion(+), 1 deletion(-)
  • 切换到master分支
$ git checkout master
Switched to branch 'master'
  • 在master上修改
在master分支上把test.txt文件的最后一行改为:

Creating a new branch is quick and simple !
  • 在master上提交
$ git add test.txt

$ git commit -m "and simple"
[master 5de8d2c] and simple
 1 file changed, 1 insertion(+), 1 deletion(-)
  • 现在的情况

  • 执行合并
$ git merge feature1
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

出现了冲突

$ git status
On branch master
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   test.txt

no changes added to commit (use "git add" and/or "git commit -a")
  • 手动合并
    查看test.txt
$ cat test.txt
This is a test file to git !

This is a another line !

second change

<<<<<<< HEAD
Creating a new branch is quick and simple !
=======
Creating a new branch is quick & simple!
>>>>>>> feature1

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存

Creating a new branch is quick and simple !
  • 重新提交

    $ git add test.txt
    
    $ git commit -m "conflict fixed"
    [master 4d854ab] conflict fixed
    
  • 查看分支合并情况
$ git log --graph --pretty=oneline --abbrev-commit
*   4d854ab conflict fixed
|\
| * 0a8265e & simple
* | 5de8d2c and simple
|/
* cb3e4e9 branch test
* 5886d8d first commit
* e5d5abd Test file
  • 删除feature1分支
$ git branch -d feature1
Deleted branch feature1 (was 0a8265e).

分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

创建分支和之前相同,只是在准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward

git merge --no-ff -m "merge with no-ff" dev

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活

干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

Bug分支

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交

并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?

幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

git stash

首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支

修复完成后,切换到master分支,并完成合并,最后删除issue-101分支

最后,恢复工作现场

查看工作现场:

git stash list

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了

Feature分支

首先创建了一个分支,做了一些更改。在提交之前,因为各种原因不想提交合并了。

删除这个分支

git branch -d feature-vulcan

会报错,说没有合并,如果删除,将丢失掉修改,如果要强行删除,需要使用命令 强制删除

git branch -D feature-vulcan

标签

发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照

创建标签

首先,切换到需要打标签的分支上

$ git checkout -b dec
Switched to a new branch 'dec'

然后,敲命令git tag 就可以打一个新标签

git tag <name>
$ git tag v1.0

可以用命令git tag查看所有标签

$ git tag
v1.0

可以用git show 查看标签信息

$ git show v1.0
commit 4d854abf006a3658893a091712196d5f3fefc7d5
Merge: 5de8d2c 0a8265e
Author: adamweixuan <805366180@qq.com>
Date:   Mon Aug 31 13:30:08 2015 +0800

    conflict fixed

diff --cc test.txt
index ccdc542,3cd9799..cbf9c25
--- a/test.txt
+++ b/test.txt
@@@ -4,4 -4,4 +4,8 @@@ This is a another line

  second change

 -Creating a new branch is quick & simple!
++<<<<<<< HEAD
 +Creating a new branch is quick and simple !
++=======
++Creating a new branch is quick and simple !
++>>>>>>> feature1

可以创建带有说明的标签,用-a指定标签名,-m指定说明文字

git tag -a v0.1 -m "version 0.1 released" 3628164

删除本地标签

$ git tag -d v1.0
Deleted tag 'v1.0' (was 4d854ab)

如果要推送某个标签到远程,使用命令git push origin

git push origin V1.0

或者,一次性推送全部尚未推送到远程的本地标签

git push origin --tags

删除远程标签:

先从本地删除,

 git tag -d v1.0

然后,从远程删除。删除命令也是push,但是格式如下:

git push origin :refs/tags/v1.0

自定义git

设置显示颜色

git config --global color.ui true

配置别名

status 别名为st

git config --global alias.st status
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 公司使用Git基本流程包括以下几个步骤: 1. 初始化仓使用git init命令在项目文件夹中初始化一个Git,生成.git隐藏文件夹,用于存储版本控制相关的信息。 2. 配置用户名和邮箱:使用git config --global user.name和git config --global user.email命令配置全局的用户名和邮箱地址,这些信息会被写入到.gitconfig文件中,以便在提交代码时标识作者身份。 3. 克隆远程仓使用git clone命令将远程仓克隆到本地,可以通过指定远程仓的URL或者名称来进行克隆。 4. 创建分支:使用git branch命令创建一个新的分支,可以基于主分支或其他已存在的分支进行创建。 5. 切换分支:使用git checkout命令切换到指定的分支,可以在不同的分支上进行开发和修改。 6. 添加和提交代码:使用git add命令将修改的文件添加到暂存区,然后使用git commit命令将暂存区的文件提交到本地仓。 7. 拉取和推送代码:使用git pull命令从远程仓拉取最新的代码到本地仓使用git push命令将本地仓的代码推送到远程仓。 8. 合并分支:使用git merge命令将一个分支的修改合并到另一个分支上,可以将开发完成的功能合并到主分支上。 9. 解决冲突:在合并分支或拉取代码时,如果存在冲突,需要手动解决冲突并提交修改。 10. 查看日志和版本:使用git log命令查看提交的日志记录,可以查看每次提交的作者、时间和修改内容等信息。 以上是公司Git使用基本流程,可以根据具体的项目需求和团队协作方式进行调整和扩展。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [Git基本使用方法教程(入门级)](https://blog.csdn.net/weixin_71171795/article/details/127938111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值