职场巨白:git操作相关

假设发起一个merge request,然后mentor需要你改一些东西,在同一条commit里面。

首先,修改文件;

之后git add;

然后git commit --amend --no-edit; 意思是将当前add的东西放到上一条commit里面,然后不对commit信息做修改

                                                        如果不加 --no-edit就可以修改commit信息

接着git push origin byz -f。意思是强制提交,因为你本地最新的commit跟仓库的已经不一样了,有冲突,所以需要强制覆盖gitlab或github。

需要注意的是已经合并到master分支的commit 不要做任何这样的操作。

一.创建版本库

创建一个版本库需要创建的是一个空的目录。

然后 git init 把这个目录变成Git可以管理的仓库,这时当前目录下就会多一个.git 目录。

把一个或多个文件放到git仓库:git add 文件名.或者 git add .

之后 git commit -m"本次提交的说明"

git status 查看仓库当前的状态,包括哪个文件被修改了,哪个文件改过没有被提交

git diff 文件名/git diff 查看当前文件或所有文件具体修改的内容

git diff HEAD -- 文件名 查看工作区和版本库里面最新版本的区别

如果对文件进行了修改,需要再一次git add ,git commit。git status发现nothing to commit表示所有改动都已经提交了。

git log 显示从最近到最远的提交日志,信息太多,可以用 git log --pertty=oneline 简化信息。

每提交一个新版本,git就会把他们自动串成一条时间线

二.版本回退

HEAD 表示当前版本,HEAD^表示上一个版本,上上个版本HEAD^^,往上100个版本HEAD~100。

回退到上一个版本可以用 git reset --hard HEAD^,指定回到未来的某个版本,根据未来的那个版本的commit id可以获得 git reset --hard 234j3oi,版本号写前几位就可以。

git reflog记录了你的每一次的命令。

三.工作区和暂存区

工作区是我们在电脑中能看到的目录或文件夹。工作区中的.git文件不算工作区,而是git的版本库。Git的版本库里存了很多东西,最重要的就是成为stage的暂存区,还有一个git自动创建的master分支,以及指向master的一个指针HEAD.

git-repo

git add 命令是把要提交的所有修改放到暂存区中,然后执行commit就可以一次把暂存区的所有修改提交到分支。

git-stage-after-commit

四.撤销修改

git checkout -- filename 把文件在工作区的修改全部撤销:

1.修改后没有放到暂存区,撤销修改就回到和版本库一样的状态

2.已经添加到暂存区,又做了修改,现在,撤销修改就回到添加到暂存区后的状态

也就是说,这个命令让这个文件回到最近一次git commit 或 git add 时的状态

如果要撤销的修改在add之后 commit之前,用 git reset HEAD <filename> 可以把暂存区的修改撤销掉,重新放回工作区。

git reset既可以回退版本,也可以把暂存区的修改回退到工作区。HEAD表示最新的版本。之后再用git checkout --filename丢弃工作区的修改。

如果已经commit了,需要撤销本次提交,那么需要版本回退。

五.删除文件

将一个已经 commit 的文件删除,git status会告诉你哪些文件被删除:

1.确实要删除此文件:git rm filename,git commit -m"delete something"

2.误删文件,可以从版本库里恢复 git checkout -- filename。用版本库里的版本替换工作区的版本,无论工作区是修改还是删除都可以 一键还原

六.添加远程库和从远程库克隆

要关联一个远程库,使用命令 git remote add origin git@server-name:path/repo-name.git

首次推送master分支的所有内容用 git push -u origin master,之后用git push origin master推送最新修改

如果远程库已存在,需要从远程库克隆一个本地库使用 git clone [email protected]....这块是复制git库的地址。通过ssh支持的原生git协议速度最快。

七.分支管理

创建dev分支,然后切换到dev分支:git checkout -b dev(创建并切换,相当于git branch dev,git checkout dev)

git branch 查看当前分支 带星号的是当前分支,然后在此分支进行修改和提交,之后git checkout master,切换回master分支,如果修改完成,将dev分支的内容合并到master分支上git merge dev。之后就可以删除dev分支 gitbranch-d dev。

如果master分支在在你修改之后也做了修改,merge会有冲突,需要手动解决冲突,然后再add commit。

git-br-feature1git-br-conflict-merged

然后用git log --graph可以看到分支合并图

Bug 分支:

修复bug时,通过 git stash 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。

git status 查看工作区,工作区是干净的,就可以创建分支来修复bug。

git stash list 查看工作现场,git把stash内容存在某个地方,可以有两种方法恢复

1.git stash apply恢复,恢复后stash内容不删除,用git stash drop来删除

2.git stash pop 恢复的同时stash内容也删了

开发一个新的feature,最好新建一个分支,如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除

多人协作:

当从远程库克隆时,git自动把本地master分支和远程的master分支对应起来,远程仓库默认名是origin。

git remote -v 查看远程库详细信息,包括可以抓取和推送的origin地址。

多人协作的工作模式通常是这样:

1.首先试图用git push origin <branch-name>推送自己的修改;

2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并,如果git pull显示there is no tracking information什么的表示没有指定本地dev分支与远程origin/dev分支的链接,用 git branch --set-upstream-to=origin/dev dev。然后再pull。

3.如果合并有冲突,则解决冲突,并在本地提交;

4.没有冲突或者解决掉冲突之后,再用 git push origin <branch-name>推送就能成功;

git rebase 将分叉的提交历史整理成一条直线。

也就是可以把本地未push的分叉提交历史整理成直线;

rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

如果commit,push了多次,我们想给合并为一条:

首先:git reset commitid

然后 git add .,git commit -m"合并"

最后 git push --set-upstream origin bingyuzi --force 即可合并成一条commit。这样以后再这个分支 可以直接 git push -f。不需要再加origin bingyuzi 

还有一种方法,例如将最近的四条commit合并,git rebase -i HEAD~4。会进入VIM,按 i 进入编辑状态,然后将下面三个黄色的pick改成f,然后按esc,输入:wq。可用git log查看一下,然后 git push origin bingyuzi -f。

提交的时候,查看日志 发现之前把author改成了自己的名字,需要切换。全部切换,从网上找到了一段代码

git filter-branch --env-filter '
OLD_EMAIL="[email protected]"
CORRECT_NAME="bingyuzi"
CORRECT_EMAIL="[email protected]"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
发布了25 篇原创文章 · 获赞 1 · 访问量 7526

猜你喜欢

转载自blog.csdn.net/qq_28334237/article/details/95949915