一、git使用详解
图片使用象话的博客_优快云博客-Java工具,K8S,Python领域博主博主的,侵权的话请联系我,我会删掉的。
1、使用步骤
2、本地代码与服务器代码的关系
3、git提交代码流程
4、总体示意图
二、Git常用命令
1、git clone
我们需要克隆远程的代码进行编辑,代码服务器比如在file:10.243.140.85/unicenter,使用下面命令可以完成代码复制。
#克隆远端url的数据
git clone url
#克隆远端url的数据到某个文件夹下
git clone url 文件夹
其中,git url支持HTTP/HTTPS/network driver/git,还可以扩展
例如:克隆我们共享文件服务器的代码命令如下
git clone file:10.21.14.22/unicenter
git clone GitHub - prajnaCat/mmd-web: 狂人日记前端代码仓库课 /skk-web
#从远程url克隆仓库的镜像(经常使用于仓库迁移的第一步)
git clone --mirror url
2、git status
如果需要确定哪些文件当前处于什么状态,可以使用git status命令。
#显示当前分支,各个文件的状态
git status
3、git branch
一般情况下,我们修改一个Bug或者新加一个需求,都需要创建一个分支,这时就需要用到以下两个命令。
#创建新的分支
git branch <branch_name>
#查看远程分支
git branch -v
#查看所有分支
git branch -a
#删除本地
git branch -d branchname
#强制删除本地
git branch -D branchname
#删除远程分支
git push origin --delete branchname
4、git checkout
#基于当前分支创建new_branch_name
git checkout -b <new_branch_name>
例如:创建一个新的分支a,并且切换到a分支。
git checkout -b a
相当于如下命令
git branch a
git checkout a
#基于branch_name创建new_branch_name
git checkout -b <new_branch_name> <branch_name>
#回滚文件或者文件夹,撤销为提交的修改
git checkout file/folder
#切换到某个commit的状态
git checkout commitHeader
#基于一个远程分支创建一个本地分支(建议本地分支最好和远程分支同名)
git checkout -b 本地分支名 远程分支名
5、git add
在我们修改、删除或添加了一下文件需要提交时,首先就需要将这些修改过的文件添加到我们的索引库中,git是根据索引库中的内容来进行文件的提交
git add <file>
git commit -m “messages to commit”
git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A :是上面两个功能的合集(git add --all的缩写)
如果简单修改了一个文件,可以使用
git commit -a -m “messages to commit”
等效于
git add <file>
git commit -m “messages to commit”
6、git rebase
一般项目开发都是团队性的,假设项目里有几十个人,可能时刻都有人在提交着自己的修改内容至master,当你提交自己的修改时,别人已经提交了很多内容,这时你的代码已经与master不一致,就需要再次rebase到最新的master,解决相关冲突,然后再进行提交。
#将master rebase到branch
git rebase master <branch>
7、git init
要对现有的某个项目用Git进行管理,我们可以执行下面命令,在项目所在目录执行命令之后,会出现一个名为.git的目录,存放了Git所需的数据和资源。
#初始化,刚开始创建一个项目时使用此命令
git init
#创建一个新的项目repo
git init –bare
8、git merge
#将branch分支合并到当前分支
git merge <branch>
比如, 在主线master上,合并分支username的功能,命令如下:
# 确保此时在主线master上, 可以使用git checkout master到主线
git merge username
比如, 在主线master上,合并远程origin主线master上的commits,命令如下:
# 确保此时在主线master上,并且已经执行git fetch origin master
git merge origin/master
# 回滚合并merge,适用于merge之后还未执行 (git add .)如果执行了add则使用 reset命令
git merge --abort
9、git remote
#连接远程仓库配合git init使用
git remote add origin https://github.com/yourName/repositoryname.git
#列出远程分支名称
git remote -v
#列出远程分支的详细信息
git remote -v
#给本地项目设置新的git地址(经常使用于仓库迁移,修改仓库镜像的git地址)
git remote set-url --push origin https://github.com/yourName/repositoryname.git(新地址)
10、git log
#查看文件的提交记录
git log
#显示提交的日志树
git log --graph
如果需要结束日志查看,可以使用 q 退出日志树
11、git diff
#比较当前文件和暂存区文件之间的差异,也可以用来比较两个branch之间的差异。
git diff
#表示比较当前分支和master分支之间的区别。
git diff master
12、git pull
#取回远端主机的更新,并合并到当前分支
git pull
例如:取回origin主机的master分支,并合并到当前的分支
git pull origin master
git pull --rebase <远程> <分支名>
#我们pull远程origin的master分支
git pull origin master
相当于
git fetch origin master
git checkout master
git rebase origin master
#我们pull 远程origin的master分支,并从origin/master到分支rebase到本地分支operators
git pull --rebase origin master:operators
相当于
git fetch origin master
git checkout operators
git rebase origin/master
13、git push
#将本地分支的更新推送到远程主机
git push <remote> <branch>
#将本地的master分支推送到orign主机的master分支
git push orign master
14、git fetch
#从远程获取最新版本的commits到本地,不会自动merge
git fetch
#从远程的origin的master主分支下载最新的commits到origin/master分支上
git fetch origin master
此时,远程的代码并未合并到本地的master分支上。如果需要合并,请参见git merge命令。
然后比较本地的master分支和origin/master分支的差别
git log -p master origin/master
15、git config
Git还可以根据个人喜好,配置快捷键别名,方便键入,如下:
#配置用户名
git config –global user.name “Xiaojian Xu”
#配置邮箱
git config –global user.email “Xiaojian.Xu@fisglobal.com”
#配置co 为checkout命令
git config --global alias.co checkout
#配置br为branch命令
git config --global alias.br branch
#配置ci为commit命令
git config --global alias.ci commit
#配置st为status命令
git config --global alias.st status
#配置s为status命令
git config --global alias.s status
#查看配置信息
git config --list
#重新设置git的用户名和密码
(当你的密码修改过,在出现remote: HTTP Basic: Access denied fatal: Authentication failed for错误时,使用下面的命令,相当于清空以前的设置或者使用记录,使用现在录入的)
git config --system --unset credential.helper
16、git cherry-pick
#把某次提交拉取到当前分支上,这个命令是“本地特性”,
遇到报错 fatal: bad object commit_ID,表明当前分支不知道这次提交,
需要先执行 git pull,来让当前分支知道其他分支后来的提交。
git cherry-pick <commit_ID>
17、git revert
#把某次已经push的一次提交(commit_ID)回滚掉,然后 git push到远程分支。
git revert commit_ID
git push
注意:git revert commit_ID 是在本地分支操作的,并不会在影响远程分支,所以需要 git push 推送到远程分支上。
18、git stash
#把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续的恢复(暂存之后,会删除本地的被暂存的内容)
git stash save 'stash名称';
#恢复之前缓存的到工作目录 (会删除 git stash保存的那一份)
git stash pop
#缓存堆栈中的stash多次应用到工作目录中,但并不删除git stash保存的那一份
git stash apply stash{n}
#删除stash
git stash drop stash{0}
19、git tag
#在本地打标签,如果需要推到远程使用:git push origin version1.0
git tag version1.0
#查看所有的标签
git tag -l
#删除本地的tag
git tag -d tagname
#删除远程的tag
git push origin :refs/tags/tagname
20、git reset
# 撤回git add 的文件
git reset -- minxed HEAD
# 提交回滚到某次提交,更改的内容保持为待提交的状态
git reset --soft 'commitID'
# --hard的回滚,会丢弃所有的提交内容
git reset --hard 'commitID'
21、git rebase
在 feature-111 分支上执行 git rebase develop 命令时,你实际上是在将 feature-111 分支上自最后一次从 develop 分支检出(或者合并/rebase)以来所做的所有更改,重新基于当前的 develop 分支的头部进行应用。这样做的好处是它可以创建一个更线性、更干净的提交历史,特别是在多个分支并行开发时
三、场景处理
1、放弃本地文件的修改
1.1、未使用git add 缓存代码
#使用git checkout -- filename来用远程覆盖本地的修改
git checkout --filename
-----------------------------------------------------------------------------------------不关注我“象话”吗?