git提交操作--一个git小白的学习的记录

开发流程:

1、先到本地的master分支上拉最新的代码。
2、合了以后再建新的分支,然后再开发;

创建本地版本库:

1、到目标文件夹****** 下:利用git init 就可以将该目录变成git可以管理的仓库,且默认分支为master.
这时候你当前testgit目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的,别动它!!!

$ git init 
Initialized empty Git repository in ****** /.git/
(base) 
# ****** on git:master x [13:53:38] 

把文件添加到版本库中:

常用命令

git add ** 		# 添加指定文件到暂存区;
git add -A 		# 添加工作区内所有文件;

git commit -m ''message***{此处为提交的注释}",		# 将暂存区所有内容文件添加到当天分支;

git status			# 查看状态
git diff [**]			# 查看文件的修改内容

将本地git库和远程github上新建的库进行绑定:

当前情况可以在建分支的时候看到命令的~

# 本地文件commit后,执行以下操作:
git remote add origin https://github.com/tugenhua0707/testgit.git
git push -u origin master					# 由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

# 以后推送代码就如下:
git push origin master:master {本地分支:远端分支}			# (远端分支没有的话,会自动创建一个分支)

创建和合并分支:

为了避免错误,在自己的模块可以创建分支,后期再进行合并

git checkout -B 新分支名 		# 创建分支;会直接切换到新的分支

git branch						# 查看当前分支,会列出所有的分支,当前分支前面会添加一个星号

git checkout name				# 切换到指定分支
git merge name					# 合并某分支到当前分支
git branch –d name				# 删除分支


# 多个分支:
1、在当前dev分支修改内容commit后;
2、切回到主分支;	git checkout master
3、合并分支:		git merge –no-ff  -m “注释” dev
4、随后就可以删除dev分支了:		git branch -d dev
5、查看历史分支提交情况: 			git log --graph --pretty=oneline --abbrev-commit

# 多个分支,未提交前,可以将修改暂存后,重新开发新的分支后再回来开发,
# 拉远端代码的时候也可利用缓存将代码更新到最新版本,
背景:当前正在dev分支开发,但是没开发完;临时有新的需求要先做,
1、在dev分支下,缓存修改内容:	git stash
2、在要修改分支下(这里假设是 feat分支),创建一个新分支:		git checkout -B issue-404;
3、在issue-404分支下进行修改,然后add,commit,
4、回到主分支feat下,合并新分支,然后删除新分支
	git checkout feat;
	git merge –no-ff  -m “注释” issue-404
	git branch -d issue-404
5、回到dev分支,接着开发
	git checkout dev
	git stash list  # 查看缓存文件
	git stash pop stash@{0}--【缓存文件看到的编号】

当本地和远端存下冲突时,可以使用gitstash命令进行处理;

1、git stash     这样本地的所有修改就都被暂时存储起来 。是用git stash list可以看到保存的信息:
	git stash list 查看编号
2、暂存了本地修改之后,就可以pull了;
3、pull以后,再还原暂存的指定编号内容,git stash pop stash@{0}

多人协作

当你从远程库克隆时候,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且远程库的默认名称是origin。

1、要查看远程库的信息 使用 git remote
2、要查看远程库的详细信息 使用 git remote –v

版本回退:

git log 			# 查看日志
git log –pretty=oneline			# 日志只显示版本号和注释
git reset  --hard HEAD^		# 回退到上一个版本

git reflog				# 查看历史提交版本号
git reset  --hard 版本号		# 回退到指定版本号

 git checkout -- **				# 将指定文件未add的文件修改全部撤销

创建忽略文件.gitignore:

1、到指定文件下,添加.gitignore文件:

$ touch .gitignore

2、在生成的.gitignore添加要忽略的文件,可以用* 作为通配符
我的.gitignore

resp_text
.vscode
.ipynb_checkpoints
.idea
__pycache__
*.ipynb

撤销指定commit–转载

因为我之前提交了,这里我只用了第二种的revert,然后强推上去是可行的,也不知道这样合适不?

撤销commit分为两种,一种是你已经push了,一种是还没有push
1.第一种情况:还没有push,只是在本地commit

git reset --soft|--mixed|--hard <commit_id>
git push develop develop --force  (本地分支和远程分支都是 develop)

这里的<commit_id>就是每次commit的SHA-1,可以在log里查看到

  • –mixed 会保留源码,只是将git commit和index 信息回退到了某个版本.

  • –soft 保留源码,只回退到commit信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

  • –hard 源码也会回退到某个版本,commit和index 都会回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

当然有人在push代码以后,也使用 reset --hard <commit…> 回退代码到某个版本之前,但是这样会有一个问题,你线上的代码没有变,线上commit,index都没有变,当你把本地代码修改完提交的时候你会发现全是冲突…这时换下一种

2.commit push 代码已经更新到远程仓库

对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令

git revert <commit_id>

revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新。
注意:git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit,看似达到的效果是一样的,其实完全不同。
第一:上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.
第二:如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.
第三:reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

git cherry-pick […] 将一个分支的commit移到另一个分支:

这里主要是在一个分支上多个commit后,但是提交的时候要分在不同的分支,为了保证在pull requsts上不显示其他的commit,需要将commit进行分开,就可以使用git cherry-pick进行移动。(ps。理想的情况还是在开始就在不同的分支上开发,刚开始就不太知道,导致提交的有问题…),背景:在own分支上提交了多个commit,然后需要将某个commit改到dev分支。操作步骤:
首先切换到own分支下,查看log,找到指定commit的commitID

git checkout own
git log
..... // 得到commitID

然后切换到目标分支dev,采用cherry-pick移动指定commit.,再用git log就可以看到提交历史中有了目标commit了,然后再push到远端就行了。

git checkout dev
git cherry-pick commitID

git 删除本地和远端分支

删除本地分支

  1. git branch 查看本地分支列表
  2. git branch -d 分支名

删除远端分支

  1. git branch -a 查看分支,
    在这里插入图片描述
  2. git push origin --delete 远程分支名称在这里插入图片描述

解除本地与远端的关联绑定

最近有同事离职,然后在测试机上他之前拉代码的权限就没有了,当我们重新拉代码时就会报错,这里需要解除本地和远端的关联,重新连接,这里借鉴了别人写的文章:[git修改远程仓库关联:https://www.cnblogs.com/sugar-tomato/p/9029205.html]

# 方法一 通过命令直接修改远程地址
进入git_test根目录
git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址
git remote set-url origin 仓库地址

# 方法二 通过命令先删除再添加远程仓库
进入git_test根目录
git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址
git remote rm origin
git remote add origin 仓库地址

获取远端某分支代码 git fetch origin dev

之前拉别人的新分支都是蠢蠢的用git pull 拉下来到指定分支,后来发现可以直接用下面这个命令,然后切换到新分支就好了

git fetch origin dev

撤销更改 git clean

参考文章: git 删除本地所有未提交的更改

# 撤销提交过未add的文件的修改
git checkout -- <FILE> :有修改的文件回到 tracked 状态,对已 tracked 的文件撤销修改。

# 撤销所有 untracked 文件
git clean -n:演习
git clean -f:删除当前目录下 untracked 文件,除过 .gitignore 里的文件或文件夹
git clean -f <path>:指定路径下
git clean -df:删除当前目录下 untracked 文件和文件夹
git clean -xf:删除当前目录下所有 untracked 文件,不管 .gitignore

合并多次commit: git rebase

参考文章:git 几个commit点合并成一个commit点

git log 获取需要合并的前一个commitId;
git rebase -i commitId;
进入编辑模式,将里面需要合并的 由pick 改为squash
保存退出后进行下一个编辑页面,修改需要提交的commit内容,保存退出即可

参考原文
git 取消commit
git 删除本地和远端分支

设置 .gitignore 忽略 pycache

$ cat .gitignore
/.idea/
*/__pycache__
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值