ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

git常用笔记(二)

2022-07-02 12:32:40  阅读:156  来源: 互联网

标签:origin 常用 git liqiang 笔记 192 master gitTest


 

git常用命令

创建版本库

什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。gitTest文件夹下面会出现一个.git隐藏文件

git init

192:gitblit liqiang$ cd gitTest
192:gitTest liqiang$ git init
Initialized empty Git repository in /Users/liqiang/Desktop/gitblit/gitTest/.git/
192:gitTest liqiang$ 

在指定目录执行git init 命令 该目录下的所有目录及文件都受git管理

关联版本库

liqiangdeMacBook-Pro:canal-canal-1.1.4 liqiang$ git remote add origin http://git.tuna.1919.cn/kh/soon/canal-canal-1.1.4.git
liqiangdeMacBook-Pro:canal-canal-1.1.4 liqiang$ git push -u origin master #推送最新代码到远程仓库

 

查看工作区修改内容

git status

192:gitTest liqiang$ mkdir files
192:gitTest liqiang$ vi hello.txt
192:gitTest liqiang$ git status

 

创建了一个files目录 并在files目录下增加了一个hello.txt文件通过git status可以看到还没有add

忽略提交文件

我们使用idea开发,会有很多target和maven的一些文件这些文件是不需要提交的所以在根目录创建.gitignore

#忽略所有.svn目录
.svn/
#忽略所有target目录
target/
#忽略所有.idea目录
.idea/
#忽略所有.iml文件
*.iml

 

 

添加和提交代码

git add git commit

这2个是组合命令 先add将文件提交到暂存区  再commit 提交到分支  git默认会创建一个master分支

192:gitTest liqiang$ git add files
192:gitTest liqiang$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   files/hello.txt

执行status后再查看状态 显示还没有提交   git add . 可以提交所有

192:gitTest liqiang$ git commit files -m '创建了一个hello文件'
[master (root-commit) 224f10f] 创建了一个hello文件
 1 file changed, 1 insertion(+)
 create mode 100644 files/hello.txt
192:gitTest liqiang$ git status
On branch master
nothing to commit, working tree clean
192:gitTest liqiang$ 

执行commit就成功提交到本地仓库 或者可以到指定目录执行git add . (空格+.) 提交目录下面所有文件

查看提交详情

查看提交的详情: git log -

查看提交记录

git log

192:gitTest liqiang$ git log
commit 224f10fd409bc7f8f83167167c42d05e36a5bb24 (HEAD -> master)
Author: liqiang <www.liqiand@qq.com>
Date:   Fri Jan 4 13:50:16 2019 +0800

    创建了一个hello文件

可以看到刚才的提交记录

查看某个分支日志

 git log $分支名/tag名/远程分

查看所有操作过的命令日志

可以除了提交以为操作分支分支相关 等命令都在

git reflog 
liqiangdeMacBook-Pro:ewei-helpdesk liqiang$ git reflog
7bd66c4bb (HEAD -> develop_liqiang, origin/develop) HEAD@{0}: checkout: moving from feature_liqiang_7.9.51.2 to develop_liqiang
2b79d6878 (origin/feature_liqiang_7.9.51.2, feature_liqiang_7.9.51.2) HEAD@{1}: commit: fix(7.9.51.2):修复未返provider_id导致权限校验异常问题
f9d2e176b (tag: 7.9.51.2) HEAD@{2}: checkout: moving from develop_liqiang to feature_liqiang_7.9.51.2
7bd66c4bb (HEAD -> develop_liqiang, origin/develop) HEAD@{3}: checkout: moving from feature_liqiang_7.9.51.2 to develop_liqiang
f9d2e176b (tag: 7.9.51.2) HEAD@{4}: checkout: moving from f9d2e176b1ed089adcbd236c0ba45bd2a6694d48 to feature_liqiang_7.9.51.2
f9d2e176b (tag: 7.9.51.2) HEAD@{5}: checkout: moving from develop_7.9.51 to 7.9.51.2
4409aad29 (develop_7.9.51) HEAD@{6}: checkout: moving from feature_liqiang_7.9.51.2 to develop_7.9.51
f9d2e176b (tag: 7.9.51.2) HEAD@{7}: checkout: moving from develop_liqiang to feature_liqiang_7.9.51.2
7bd66c4bb (HEAD -> develop_liqiang, origin/develop) HEAD@{8}: checkout: moving from develop_7.9.51 to develop_liqiang
4409aad29 (develop_7.9.51) HEAD@{9}: checkout: moving from feature_liqiang_7.9.51.2 to develop_7.9.51

 

 

版本回退 

版本回退非常快,仅仅是把指针移动到指定版本,回退后如果想撤销到回退之前的分支,需要把之前的版本id记下来 否则再次git log就看不到了

伪造测试数据 对文件进行2此修改并提交 查看日志

192:gitTest liqiang$ git log
commit 3708002e7618ca88f349cdec3517b0b1f9611413 (HEAD -> master)
Author: liqiang <www.liqiand@qq.com>
Date:   Fri Jan 4 13:58:24 2019 +0800

    文件内容修改为hell3

commit 209a176fa3413ac5f3528c2da1ab7126802160e3
Author: liqiang <www.liqiand@qq.com>
Date:   Fri Jan 4 13:57:08 2019 +0800

    文件内容修改为hell2

commit 224f10fd409bc7f8f83167167c42d05e36a5bb24
Author: liqiang <www.liqiand@qq.com>
Date:   Fri Jan 4 13:50:16 2019 +0800

    创建了一个hello文件

 

或者加上--pretty=oneline 使日志一行显示

192:gitTest liqiang$ git log --pretty=oneline
3708002e7618ca88f349cdec3517b0b1f9611413 (HEAD -> master) 文件内容修改为hell3
209a176fa3413ac5f3528c2da1ab7126802160e3 文件内容修改为hell2
224f10fd409bc7f8f83167167c42d05e36a5bb24 创建了一个hello文件
192:gitTest liqiang$ 

 

 回退到上一个版本

192:gitTest liqiang$ git reset --hard HEAD^
HEAD is now at 209a176 文件内容修改为hell2

 

打开文件可以看到变成了hello2

如果要回退到指定版本呢只需要hard参数加上要回退的版本号

$  git reset --hard 3708002e7618ca88f349cdec3517b0b1f9611413
HEAD is now at 3708002 文件内容修改为hell3

 git每次提交 都会为每次提交保留一个版本  版本回退只是将指针指向回退的版本

当版本回退 head 重新指向了 hello2

强制合并到远程同名分支 让远程分支代码跟本地一样

git push origin HEAD --force

撤销add 

192:files liqiang$ git add hello.txt
192:files liqiang$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   hello.txt

通过将文件修改通过git add到暂存区 如何撤销提交(我工作中经常遇到这样的需求)

192:files liqiang$ git reset HEAD hello.txt
Unstaged changes after reset:
M    files/hello.txt
192:files liqiang$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   hello.txt

git reset HEAD 不加文件信息 则是 撤销所有暂存区

git reset --soft HEAD^

撤销本地修改 

git checkout -- filepathname

192:files liqiang$ git checkout -- hello.txt 

删除文件/目录

git rm filename   git rm -r directoryName

92:gitTest liqiang$ git rm hello.txt
92:gitTest liqiang$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    files/hello.txt

如果需要撤销与上面撤销修改一致

撤销Untracked files

针对pull代码报untracked files

# 删除 untracked files
git clean -f
 
# 连 untracked 的目录也一起删掉
git clean -fd
 
# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
 
# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

 

添加远程仓库 

$ git remote add [远程仓库名字(一般叫origin)] [远程仓库地址] $ git push -u origin master

$ git remote add  本地仓库与远程仓库关联

$ git push -u origin master  推送到远程仓库

可以使用github 我这里是本地搭建了一个git服务器 gitblit

 

192:gitTest liqiang$ git remote add origin http://admin@127.0.0.1:1234/r/gitTest.git
192:gitTest liqiang$ git push -u origin master
Password for 'http://admin@127.0.0.1:1234': 
To http://127.0.0.1:1234/r/gitTest.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'http://admin@127.0.0.1:1234/r/gitTest.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
192:gitTest liqiang$ failed to push some refs to

 报错是因为我上面创建版本库 勾上了添加README文件 origin不是一个独立的版本库了。。如果使用clone 将没有问题 

这个时候需要执行

$ git pull origin master --allow-unrelated-histories

合并origin和本地版本库

$ git commit -m '合并'

最后推送到远程origin

$ git push -u origin master

PUll回退

1、git reflog 

2、git reset --hard   <COMMIT_ID> 或者 git reset --hard HEAD@{2}

clone远程分支

  git clone

$ git clone [git地址]

 

强制推送

git push --force

git push -f

git分支管理

创建并切换分支

git checkout -b feature/6.5.5.5_liqiang origin/feature/6.5.5.5

 切换分支

192:gitTest liqiang$ git checkout -b dev
Switched to a new branch 'dev'
192:gitTest liqiang$ git branch
* dev
  master
192:gitTest liqiang$ 

git branch为查看当前分支  上面当前指向dev分支

当我们再dev上面做任何修改都不会影响其他分支

切换分支

192:gitTest liqiang$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
192:gitTest liqiang$ git branch
  dev
* master
192:gitTest liqiang$ 

解决冲突 

dev分支将hello.txt改为并推送到远程仓库

hello2
hhhhhh
~      

再切换到master将hell.txt改为并推送到远程仓库

hello5
llllll

执行$ git merge [分支名字]将指定分支合并到当前分支

192:files liqiang$ git branch
  dev
* master
192:files liqiang$ 

当前分支是master  执行git merge [分支名字] 就是讲指定分支合并到当前分支

192:files liqiang$ git merge dev
Auto-merging files/hello.txt
CONFLICT (content): Merge conflict in files/hello.txt
Automatic merge failed; fix conflicts and then commit the result.

存在冲突无法自动合并  git告诉我们hello.txt冲突了 需要我们手动合并

192:files liqiang$ git status
On branch master
Your branch is up to date with 'origin/master'.

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

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

    both modified:   hello.txt

no changes added to commit (use "git add" and/or "git commit -a")

git status会告诉我们冲突的文件

查看文件  冲突的都用====标记起来

<<<<<<< HEAD
hello5
llllll
=======
hello2
hhhhhh
>>>>>>> dev
~                

Head为 当前分支  dev为dev内容 手动修改 选择要保留的部分 

hello5
hhhhhh

重新add  commit push即可

Fast forward模式

当我们使用git merge dev进行合并时会将master直接将指针指向 dev 实现快速合并

使用--no-ff -m "merge with no-ff" 参数时会禁用Fast forward模式 会重新生成一个新的提交记录 并将master指向他

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

如:

 

 

 

 执行命令创建一个dev分支

$ git checkout -b dev

上面会创建并切换分支 所以HEAD指向dev

我们再dev分支进行修改提交操作

192:files liqiang$ git commit -m '修改hello文件'
[dev 2ade7d5] 修改hello文件

Fast forward合并分支

直接快速切换将maste指向合并时dev的版本记录线

Fast forward合并

会多一次commit并将master指针指向他

bug分支

工作中用得比较多  常常会遇到 自己本地改动了大量代码 线上有bug需要立即更改部署  但是更改后会被本地修改代码影响

我们将hello.txt改为

hello5
hhhhhh
fffff
fffff
fffff
fffff
ffffff
fff
ffff
ffffff
192:files liqiang$ git stash save '备份'
Saved working directory and index state On master: 备份

这个时候暂存区 和工作区都会被还原成分支的最新版本  同时把自己修改的数据备份起来

这个时候我们就可以修改bug并并提交

通过git stash list可以查看我们的备份 

192:files liqiang$ git stash list
stash@{0}: On master: 备份

改完bug后通过

$ git stash apply stash@{0}

则可以还原

修改分支名字 

1.删除远程分支

git push --delete origin [分支名字]

2.重命名本地分支

git branch -m [修改的分支名字] [新增分支名字]

 

3.重新提交新分支

git push origin [新分支名字]

 

删除本地分支

git branch -D 分支名字

 

删除远程分支

liqiangdeMacBook-Pro:comm-libs liqiang$  git push origin --delete upgrade_fs_user
git: 'credential-wincred' is not a git command. See 'git --help'.
To http://git.biaoguoworks.com/user/comm-libs.git
 - [deleted]         upgrade_fs_user

 

 

查看远程分支

liqiangdeMacBook-Pro:comm-libs liqiang$ git branch -r
  origin/HEAD -> origin/master
  origin/dev
  origin/fix-feign
  origin/master
  origin/upgrade-20211129
  origin/upgrade_fs_user
  origin/yq_detail_log

查看本地分支

liqiangdeMacBook-Pro:comm-libs liqiang$ git branch
  dev
  master
* upgrade-20211129_liqiang
  upgrade_fs_user
  upgrand_trace_log_liqiang

 

 

解除关联重新关联新的仓库

liqiangdeMacBook-Pro:canal-canal-1.1.4 liqiang$ git remote rm origin
liqiangdeMacBook-Pro:canal-canal-1.1.4 liqiang$ git remote add origin http://git.tuna.1919.cn/kh/soon/canal-canal-1.1.4.git
liqiangdeMacBook-Pro:canal-canal-1.1.4 liqiang$ git push -u origin master

基于tag创建分支

2.通过:git branch <new-branch-name> <tag-name> 会根据tag创建新的分支.

例如:git branch newbranch v1.0 . 会以tag v1.0创建新的分支newbranch;

3.可以通过git checkout newbranch 切换到新的分支.

4.通过 git push origin newbranch 把本地创建的分支提交到远程仓库.

 

merge管理

常见异常

You have not concluded your merge (MERGE_HEAD exists)

表示合并失败可以

$:git merge --abort #取消合并如果Git版本 >= 1.7.4
$:git reset --merge #取消合并如果Git版本 >= 1.6.1
$:git pull

 


 

标签:origin,常用,git,liqiang,笔记,192,master,gitTest
来源: https://www.cnblogs.com/LQBlog/p/16437052.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有