Git常用命令和GUI工具

Git常用命令和GUI工具_第1张图片
Workspace:工作区
程序员进行开发改动的地方,是你当前看到的,也是最新的。
平常我们开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过程中就是对工作区的操作。

Index / Stage:暂存区
.git目录下的index文件, 暂存区会记录git add添加文件的相关信息(文件名、大小、timestamp…),不保存文件实体, 通过id指向每个文件实体。可以使用git status查看暂存区的状态。暂存区标记了你当前工作区中,哪些内容是被git管理的。
当你完成某个需求或功能后需要提交到远程仓库,那么第一步就是通过git add先提交到暂存区,被git管理。

Repository:仓库区(或本地仓库)
保存了对象被提交 过的各个版本,比起工作区和暂存区的内容,它要更旧一些
git commit后同步index的目录树到本地仓库,方便从下一步通过git push同步本地仓库与远程仓库的同步

Remote:远程仓库
远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的

Git常用命令和GUI工具_第2张图片

=================================================================

Git常用命令和GUI工具_第3张图片

配置git

#git用户名
git config --global user.name "your name"

#邮箱
git config --global user.email "[email protected]"

#显示颜色
git config --global color.ui true

初始化

mkdir project
cd project
git init #创建全新的仓库,在当前目录初始化创建仓库

git clone  'https://github.com/kwonganding/KWebNote.git' # 克隆远程仓库

添加文件,提交,查看当前仓库状态

git add my.java
#git add -f my.java     f为强制添加

git add <dir>  添加指定目录到暂存区,包括子目录
git add <file>  添加指定文件到暂存区
git add .  添加当前目录所有文件到暂存区

git rm [file1][file2]...  删除工作区文件,并且将这次删除放入暂存区

git mv [file-original][file-renamed] 改名文件,并且将这个改名放入暂存区

git commit -m "提交备注"
git commit <file> -m <message> 提交暂存区的指定文件到本地仓库
git commit --amend -m <message> 使用一次新的commit,替代上一次的提交

git status

对比文件改动内容,查看git日志,回退版本到第N个版本前,回退到指定版本

git diff my.java

git log


git reset —soft <commit> #只改变提交点,暂存区和工作目录的内容都不改变
git reset —mixed <commit> # 改变提交点,同时改变暂存区的内容
git reset —hard <commit> #暂存区、工作区的内容都会被修改到与提交点完全一致的状态
git reset --hard HEAD # 让工作区回到上次提交时的状态

git reset --hard HEAD~N

git reset --hard e475afc93c209a690c39c13a46716e8fa000c366 (此值不必写全,只要能让git知道是哪个把那本就行,一般写5-6位即可)

revert与reset的区别

git revert用一个新提交来消除一个历史提交所做的任何修改
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,减少冲突。但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突
git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容
Git常用命令和GUI工具_第4张图片

撤销修改,撤销暂存区的修改

git checkout -- my.java  #撤销到最近一次git add 或 git commit之前的状态

git reset HEAD my.java #撤销暂存区的修改,git commit之前

删除文件

git rm my.java  #若误删,需要git checkout --文件名

查看远程仓库,关联远程仓库

git remote -v

git remote add origin [email protected]:username/xxx.git

创建分支、切换分支

Git常用命令和GUI工具_第5张图片
展示分支,切换分支,创建分支,删除分支这四种操作

git branch 分支名     #新建一个分支,但依然停留在当前分支

git checkout 分支名  # 新版本 git switch 分支名 切换到指定分支,并更新工作区  

创建分支并切换

git checkout -b 分支名  # 新版本 git switch -c 分支名  新建一个分支,并切换到该分支

git branch --track <branch><remote-branch> # 新建一个分支,与指定的远程分支建立追踪关系

合并分支

git fetch <remote> # merge之前先拉一下远程仓库最新代码

git merge 其他分支名   #合并某分支到当前分支,若存在冲突会提示手动修改后在提交(默认为fast forward模式)

git merge --no-ff -m "提交备注" 其他分支名   #禁用fast forward模式

git log --graph --pretty=oneline --abbrev-commit 命令可以查看分支合并图

查看所有分支,删除分支

git branch #查看分支
git branch -a  # 远程+本地  远程分支会以红色标出,当前分支前面会标一个*号
git branch -r  #列出所有远程分支

git branch -d 分支名  #删除分支
git branch -D 分支名 #强行删除分支

git push origin --delete <branch-name>  #删除远程分支

rebase与merge的区别

两个分支,test和master,提交如下:
D—E test
/
A—B—C—F master

在master执行git merge test,然后会得到如下结果:
merge操作会生成一个新的节点,之前的提交分开显示,如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge
D--------E
/
A—B—C—F----G test, master

在master执行git rebase test,然后得到如下结果:
rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交,如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase
A—B—D—E—C’—F’ test, master

推送到远程库,推送到远程库分支

git push -u origin master # 第一次推送到master分支

git push <remote><branch> #上传本地指定分支到远程仓库
git push <remote> --force #强行推送当前分支到远程仓库,即使有冲突
git push <remote> --all #推送所有分支到远程仓库

git push origin 分支名  #推送到指定分支

将本地分支与远程分支关联

git branch --set-upstream-to 分支名 origin/分支名

关联GitHub的远程库,推送Github

git remote add github [email protected]:username/xxxx.git

git push github master

关联Gitee的远程库,推送Gitee

git remote add gitee [email protected]:username/xxxx.git

git push gitee master

把本地未push的分叉提交历史整理成直线

git rebash # 在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

克隆、克隆指定分支代码

git clone https://github.com/username/xxxx.git  # 或 git clone [email protected]:username/xxxx.git

git clone -b 分支名 https://github.com/username/xxxx.git

抓取代码

git pull

=========================================================================

保存工作空间,查看保存的工作空间,从保存的工作空间恢复,删除保存的工作空间

git stash

git stash list

git stash apply
git stash apply stash@{n} # 若存在多个保存的工作空间(n为序号0开始)

git stash drop
git stash drop stash@{n} #若存在多个保存的工作空间()

git stash pop #从保存的工作空间恢复兵删除保存的空间
git stash pop stash@{n} #若存在多个保存的工作空间(n为序号0开始)

将其他分支上的提交应用到当前分支

git cherry-pick commit的编号

============================================================

打标签

git tag v1.0 commit的id   #(不加则为之后的commit添加标签)

git tag -a v1.0 -m "提交备注" commit的id  #(不加则为之后的commit添加标签)

查看所有标签

git tag

查看标签信息

git show v1.0

删除本地标签

git tag -d v0.1

删除远程标签

git push origin :refs/tags/v1.0

推送某个标签到远程

git push origin v1.0

推送全部尚未推送的标签

git push origin --tags

=================================================

查看.gitignore文件中哪条规则写错了

git check-ignore -v 文件名

设置命令别名

git config --global alias.st status  # git status => git st

git config --global alias.unstage 'reset HEAD' # git reset HEAD file => git unstage

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" #  git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit => git lg

==================================================================

Git的GUI工具

TortoiseGit

小乌龟,SVN时代就很流行的代码管理GUI利器,Git是集成到操作系统里的,直接右键文件夹就可以进行Git操作了。
只有Windows版本,支持中文,需要单独下载安装中文语言包。
✔️开源,免费,与文件管理器的良好集成。
✔️内置冲突对比解决工具。

Git常用命令和GUI工具_第6张图片
Git常用命令和GUI工具_第7张图片
Git常用命令和GUI工具_第8张图片

Sourcetree

SourceTree是老牌的Git GUI管理工具了,也号称是最好用的Git GUI工具。

✔️适用于 Windows 和 Mac 系统,内置中文版,自动识别语言。
✔️免费、功能强大,使用简单。
✔️功能丰富,基本操作和高级操作都设计得非常流畅,适合初学者上手,支持Git Flow。
无冲突对比工具,支持配置第三方组件。

Git常用命令和GUI工具_第9张图片
Git常用命令和GUI工具_第10张图片

GitHub Desktop

Github官方出品的Git管理工具。

GitKraken
GitKraken是一个跨平台GUI Git客户端,有免费版,专业版和企业版,这些版本启用了不同的功能。

Git常用命令和GUI工具_第11张图片

你可能感兴趣的:(git/maven,git)