zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Git常用命令

Git 常用命令
2023-09-14 09:11:44 时间

一.初次连接

git config --global user.name 你的名字
git config --global user.email 你的邮箱
git init        初始化一个本地仓库
git add .     后面的点表示添加整个目录,也可以像git add README.md一样。添加单个文件
git commit -m "first commit"    从暂存区提交到本地仓库
git remote add origin https:github.com/firefoxer1992/CrmSystem.git   连接远程仓库origin
git push -u origin master          推送本地仓库内容到远程仓库


二.本地代码更新到远程仓库:

git add .                               添加整个目录到暂存区
git commit -m "second commit"          提交到本地仓库
git pull origin master                 抓取远程仓库origin的master分支的代码到本地,并合并本地代码
git push -f  origin master            强制推送到远程仓库origin的master分支
git  remote  show origin             显示远程仓库origin的信息

三.工作区,暂存区和本地仓库

* git  add  文件名  :表示将工作区文件添加到暂存区

* 撤销暂存区的文件

使用git add可以将工作区的文件,添加到暂存区
想要commit文件到本地仓库时,发现add的文件有误,可以取消add到暂存区的文件
如果是撤销所有的已经add的文件,最后面的 . 号表示所有 :
git reset HEAD .
如果是撤销某个文件或文件夹:
git reset HEAD -filename

* 查看状态

git status                 检查当前文件状态
git diff readme.txt    查看尚未暂存的文件更新了哪些部分

* 查看日志

git log 再看看现在版本库的状态。
git log可以查看提交历史,以便确定要回退到哪个版本。
git reflog查看命令历史,以便确定要回到未来的哪个版本。

* 删除本地仓库文件

git rm test.txt                                 从版本库中删除该文件
git commit -m "remove test.txt"      提交删除操作

* git checkout -- 文件名 :表示丢弃工作区文件的修改

* git commit  -amend : 表示忽略掉上次的commit记录

四.分支管理

在Git中,有一个HEAD指针,指向当前所在的本地分支。切换分支的时候,HEAD指针会随之移动。

* 分支类型

(1)local branch:

本地分支,就是我们平常操作的分支。

创建分支,名称为feature-666: git branch  feature-666

切换到分支feature-666: git checkout feature-666

(2)remote branch:

它实际上是指向远端服务器的某个分支,用来跟踪远程分支的变化

(3)tracking branch  

跟踪分支是一种和远程分支有直接联系的本地分支(远程分支的本地书签、别名),跟踪分支是一种本地分支。

当我们在跟踪分支上使用git pull命令,会自动从相应的remote branch上fetch,然后在merge到该分支上,如果我们想在跟踪分支上直接使用git push命令,让它自动push到对应的remote branch上,当我们使用git clone命令后,会自动在本地建立一个master的分支来跟踪origin/master。

 

* 分支管理


master: 主分支,主要用来版本发布。master作为基线分支,开发人员不能随便合并代码到master分支。

release:release 分支可以认为是 master 分支的未测试版。

比如说某一期的功能全部开发完成,那么就将 develop 分支合并到 release 分支,测试没有问题并且到了发布日期就合并到 master 分支,进行发布。

develop:日常开发分支,该分支正常保存了开发的最新代码。

feature:具体的功能开发分支,只与 develop 分支交互。

只与develop交互,因为feature就是新版本开发为了升级和演进需要用的,里面的所有代码只能在发布新版本且经过测试的时候才合进去master,

然后在master打tag表明所有新功能开发完毕,一次性合并。同时我们开发一般是不同的人开发不同的功能,因此各自都应该有自己的feature,然后断断续续并进develop。

hotfix:线上 bug 修复分支。master分支遇到紧急修复的bug时,请使用 hotfix 分支。

参考资料:https://blog.csdn.net/hj7jay/article/details/84527062

* 创建分支、切换分支

git branch                  查看当前分支
git branch iss53         创建iss53分支
git checkout -b iss53  创建iss53分支,并切换到iss53分支。git checkout -b相当于git branch和git check这两条命令加起来。

* 合并分支

当我们在分支iss53上改代码,解决完问题后,就可以合并分支。
git checkout master   先切换到master分支
git merge iss53         合并iss53分支到当前分支

如果分支出现冲突,然后修改后,再add,commit就可以了。

* 查看分支冲突

git status     可以查看分支冲突

* 删除分支

git branch -d iss53    删除分支iss53

git branch -D iss53    强行删除分支iss53

* 变基操作rebase:

rebase主要有两种用途。

第一种:合并多次commit。

比如,你本地commit了三次,但是这三次提交的注释有点冗余,可以使用以下命令,将这几个commit合并成一个commit。

git rebase -i HEAD~3      //合并提交,表示合并最近的三个提交

第二种:合并分支。

git rebase 用于把一个分支的修改合并到当前分支。

命令如下:

git checkout feature    //切换到feature分支
git rebase origin/dev //将远程dev上最新的分支同步到当前分支,解决完冲突,最后再git rebase --continue

这些命令会把你的"feature"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)

(这些补丁放到".git/rebase"目录中),然后把"feature"分支代码更新为最新的远程"dev"分支代码,

最后把保存的这些补丁应用到"feature"分支上。

 

rebase和merge的区别: merge命令不会保留被合并的分支的commit:

 

参考资料: https://blog.csdn.net/w57685321/article/details/86597808

参考资料: https://blog.csdn.net/hudashi/article/details/7664631

 参考资料: https://www.codercto.com/a/45325.html

 

* Cherry-Pick(猴子偷桃^_^)

会获取某一个分支的单笔提交,并作为一个新的提交引入到当前分支上。

要将 dev 分支的提交引入 feature 分支,先 checkout 到 feature 分支,比如 dev 分支的某次提交的哈希值是 2555c6e,然后执行 git cherry-pick 2555c6e。

如果发生冲突,解决冲突后先 git add .,然后 git cherry-pick --continue。

 

五.远程仓库

1.想要push到远程仓库,必须先把远程的改动拉到本地合并起来,才能再次提交自己的修改
git fetch origin master     获取远程仓库内容
git merge origin master    合并内容
“git fetch”和“git merge”指令可以合二为一,叫“git pull”,建议分开操作

2.本地给远程仓库创建分支

git branch dev        本地创建分支dev
git push origin dev   把本地分支提交到远程仓库
git branch -a         查看一下远程仓库有几个分支
git remote -v         查看远程库信息

六、标签(Tag)

tag是git版本库的一个标记,指向某个commit的指针。

tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 ...这样的标签。

八、存档

临时被叫去修复其他分支上的bug,如果想切换分支,但是还不想提交正在进行中的工作,可以选择储藏(stash)这些变更

点击查看详细的stash作用讲解

存档:  git stash
读最新存档:  git stash pop
查看存档列表:  git stash list
读指定的某个存档:  git stash apply stash@{存档编号}         如: git stash apply stash@{1}

九、多人协作

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

十、其他

1、强制删除idea缓存

git rm -r -f --cached .idea
git rm -r -f --cached .idea/workspace.xml


2、在.gitIgnore中添加忽略文件

打开.gitIgnore文件,添加相应的文件路径,比如 .idea/workspace.xml

 

3、git统计个人提交的代码行数:
since表示开始时间,before表示结束时间,author后面填的是git的昵称。

git log --since="2022-01-01" --before="2022-12-31" --author="yourname" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'

 

参考资料:

Git常用命令 

廖雪峰Git教程 

Git官方教程