Git 工作原理以及常用命令操作

GIT工作原理

    要了解GIT工作原理,先了解GIT的这几块区域:

工作区域划分   

   工作区:指的是本地工作空间,如果刚拉取下来的代码,没有修改的内容,这块区域是空白的 (modified-已修改状态)

   暂存区:将改动内容进行暂存 (staged-已暂存状态)

   HEAD:HEAD指针,当前指向的分支

   本地版本库:(commited-已提交状态)

   远程仓库:push操作后,将本地版本库推送到远程仓库

 Git 工作原理以及常用命令操作

工作流程

  • 在工作区中修改文件。(modified)
  • 将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。(staged)
  • 提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。(commited)

开发最常用的五个命令

1、git clone projectUrl 拉取远程仓库代码到本地,projectUrl是一个具体的git仓库地址路径

2、git add 将工作区的修改的内容添加到暂存区 

3、git commit 将暂存区域的的内容提交到HEAD所在的分支

4、git pull  拉取远程分支内容到本地

5、git push 将HEAD分支内容推送到远程分支上面

GIT常用命令

查看文件的状态
git status

Git 工作原理以及常用命令操作

Changes not staged for commit; 

这段信息提示我有修改的信息没有提交到暂存区,建议使用git add 命令进行添加到暂存区域,或者使用git checkout 命令放弃工作区的修改

Untracked files:

表示这些文件是新建的,还没有纳入git的管理,建议使用git add 命令将这些文件纳入git管理

git status -s  // 查看状态,比较简短的信息展示

Git 工作原理以及常用命令操作

红色M:表示有改动的文件,还没有添加到暂存区

绿色M:表示已添加到暂存区的文件

??:表示还没有纳入git管理的文件

A:表示刚纳入git管理的文件

U:表示有冲突的文件

git add .git add Test.java

1、将未跟踪的文件纳入git的管理

2、将已纳入git管理的文件的改动添加到暂存区域

3、冲突解决后,标记冲突已经解决

Git 工作原理以及常用命令操作

将远程仓库aaa 重命名为 bbb
git remote rename aaa bbb

移除远程仓库bbb
git remote remove bbb


查看某个远程仓库
git remote show origin

查看仓库的简写
git remote

查看仓库的简写以及对应的URL
git remote -v

查看本地和远程分支信息情况
git remote show origin

同步远程已经删除的分支
git remote prune origin

更新远程分支列表
git remote update origin -p


分支的命令

查看项目分叉历史图
gitk --all
git log --oneline --decorate --graph --all

增加develop分支
git checkout -b develop

删除远程develop分支
git push origin :develop

删除本地develop分支
git branch -D develop


合并分支
git merge 2.8.0-zd // 将2.8.0-zd分支合并到当前分支,这是基于本地分支进行操作,需要先 pull最新代码


tag的常用命令
创建本地tag
git tag -a 3.2.8-RELEASE -m ‘ 版本3.2.8-RELEASE‘

查看有哪些tag
git tag

要显示附注信息,我们需要用 show 指令来查看
git show 3.2.8-RELEASE

推送tag:3.2.8-RELEASE到远程代码库
git push origin 3.2.8-RELEASE


git push origin --tags

删除本地tag
git tag -d 3.2.8-RELEASE

删除远程tag
git push origin :refs/tags/3.2.8-RELEASE
git push origin --delete 3.2.8-RELEASE

拉取远程tag到本地
git fetch origin tag 3.2.8-RELEASE


检出3.2.8-RELEASE内容,仅限于查看
git checkout 3.2.8-RELEASE


6、commit的常用操作

修改已经提交的注释
git commit --amend

git commit -m "提交commit,并且编写注释"

查看已有的commit
git log

查找某个文件的commit变更历史
git log --pretty=oneline Test.java

显示最近一次commit的修改信息
git log -p -1

显示commit的文件修改统计信息。
git log --stat

查找注释信息包好test的commit的信息
git log --grep "test"

将ID为19ed20582a5fe0dc8a5da3bc1cb0a9c0ef663346 的commit合并到当前分支
git cherrry-pick 19ed20582a5fe0dc8a5da3bc1cb0a9c0ef663346

放弃本地commt
git reset --hard FETCH_HEAD

7、其他常用场景操作

记住用户名和密码:
git config --global credential.helper store
执行后,只要输入一次就行了

合并时忽略某文件
1、在项目跟目录下面新建文件.gitattributes
2、文件中添加 pom.xml merge=ours 配置
3、执行命令进行配置,git config merge.ours.driver true
执行完成以上步骤,merge的时候就不会把pom.xml的变更合并过来了

在develop分支拉取分支用来修复bug
git checkout develop // 切换到develop分支
git checkout -b bugfix // 基于develop分支拉取一个分支bugfix 并切换到该分支
git push -u origin bugfix //推送bugfix分支到远程服务器上面
然后发起请求合并,等待管理人员进行代码合并

基于tag:3.2.8-RELEASE拉取分支修复bug,然后发布3.2.9-RELEASE版本
git checkout 3.2.8-RELEASE
git checkout -b bugfix
git push -u origin bugfix
git tag -a 3.2.9-RELEASE -m ‘ 版本3.2.9-RELEASE‘
git push origin 3.2.9-RELEASE

develop分支需要上测试环境,基于develop分支打一个tag
git tag -a 3.2.8-RELEASE -m ‘ 版本3.2.8-RELEASE‘
git push origin 3.2.8-RELEASE


某些文件不想纳入git管理,新建.gitignore文件,添加以下内容

# 忽略所有的 .settings 文件
.settings/

# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO

# 忽略任何目录下名为 build 的文件夹
target/

# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt

# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf


初始项目推送到git仓库

git init // 创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件

git add . // 标识那些文件要放到git仓库进行追踪记录

git commit -m "first commit" //提交到暂存区域

git remote add origin http://proxy.clwj.sunline.cn:3000/xieqq/sssss.git //推送到远程git远程服务器上面

git push -u origin master 推送master分支到远程

git clone http://proxy.clwj.sunline.cn:3000/xieqq/sssss.git // 将git服务器上面的远程项目拉取下来。包含所有的分支和tag代码信息