git use

1. 写好file 提交上去缓存:

git add filename  把文件添加到暂存区(stage)

git commit -m "add filename"   把暂存区的内容提交到当前分支

git status 查看当前提交的file 情况,如果发现有file untracked, 并且这个file是新添加进来的没有做任何修改,可以直接 git add file, 再次 git status.

2. 修改file 并提交,直接执行步骤1.

3.如若提交过多个版本,需要返回到某个版本:

HEAD 指的是当前版本, 可以使用 git reset --hard commit-id 切换到不同的版本。

穿梭前, 使用 git log 查看提交历史, 确定要回退到哪个版本。

要重返未来, 使用 git reflog 查看命令历史, 再次回到未来的某个版本。

4.没有git add : git checkout -- file

发现修改的file有错误需要撤销, git status, 可以使用 git checkout -- file  可以丢弃工作区的修改,它会返回到这个文件最近一次的git commit或者git add的状态。

git checkout -- file 中的 -- 很重要,如果没有就变成了 切换到另一个分支的命令。

5.已经 git add 但是没有 git commit: git reset HEAD <file> , git checkout -- file

使用git status 查看一下, 修改只是添加到了暂存区还没有提交,  可直接 git reset HEAD <file> 把暂存区的修改撤销掉(unstage),重新回到工作区。

git reset 可以回退版本,那么也可以把暂存区的修改回退到工作区, 当用HEAD时表示最新的版本, 可以再使用git status 查看现在的暂存区是干净的,工作区有修改,然后再丢弃工作区的修改,git checkout -- file.

6.已经 git add 并且 git commit但没有推送到远程, 那么直接使用回退版本方法, git reset --hard commit-id .

7.删除了某个文件也算修改, git status 会记录,

如果需要删除从版本库中删除某个文件,直接 git rm file 并且 git commit -m "remove file", 此刻文件就从版本库中删除了。这个效果和手动删除某个file的效果是一样的。

如果误删了某个文件,需要将此误删文件恢复到最新版本,此版本库中还有此文件,使用

git checkout -- file  ,  git  checkout 是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以一键还原。

如果一个文件已经被提交到版本库,永远不会担心误删,但是只能恢复文件到最新版本,会丢失最近一次提交后修改的内容。

8.关联一个远程库, git remote add origin git@server-name:path/repo-name.git  , 关联后使用 git push -u origin master 第一次推送 master分支的所有内容, 以后每次本地提交后都可以使用 git push origin master 推送最新修改。

克隆远程库: git clone git@github.com:test/gitskills.git

9.从master上创建dev分支, git checkout -b dev 表示创建并切换到新分支dev, 这时候就切换到新的 dev 分支了,HEAD 指针也随即指向dev branch,也可以使用 git branch 查看当前分支, git branch 会列出所有的分支, 当前分支前面会标一个* 号,然后就可以在dev分支上工作了。

Git add file,  git commit -m "branch test", 然后切换到 master 分支, git checkout master,  此刻master上看不到刚刚dev分支 提交的file, 因为需要将dev 分支merge 到master 分支上,直接 git merge dev , git merge命令用于合并指定分支到当前分支, 合并后就可以从master 上看到 刚提交的file, 完成任务后就可以将 dev 分支删除,  git branch -d dev ,此刻再次git branch 就只剩下 master 分支了。

默认merge模式是 fast forward, 这种模式合并后看不出已经进行了合并, 所以一般添加 --no-ff 参数变成普通模式合并, 这样合并就会产生新的commit来记录过程。 

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

10.解决冲突: 解决冲突就是将git 合并失败的文件手动编辑成我们希望的内容,然后再提交。

当master和dev branch 各自都修改了内容,此刻再merge就会有conflict.

git 用 <<<<<<< , =======, >>>>>>> 标记不同的分支的内容,直接修改file 删除并保留需要留下的code,再次 git add ,git commit.

使用 git log --graph  可以看到分支合并图 。 Git log --graph  --pretty=online --abbrev-commit

11.修复bug: 工作到一半无法提交,需要停止进行修复另一个bug, 那就需要将当前工作现场储藏起来, 等以后恢复现场后继续工作, 使用 git status.   然后切换到相应的分支上创建 临时bug 分支,  git checkout master,  git checkout -b issue-101,  git add file1,  git commit -m "fix bug 101", 修复成功后切换到mster上完成合并git checkout master, git merge --no-ff -m "merged bug fix 101" issue-101, 最后删除issue-101分支 ,  然后返回分支dev 继续工作, git checkout dev, git status, 使用git stash list 来查看刚才工作现场存在哪里,  恢复工作现场 ,方式一 直接 git  stash apply , 内容恢复后stash 内容并不删除, 需要用 git stash drop来删除,方式二 使用 git stash pop, 恢复的同时也把 stash 内容删除了。

可以多次stash, 然后恢复指定的stash,  git stash list,   git stash apply stash@{0}

12.丢弃一个没有被合并过的分支, 直接 git branch -D <name> .

Git branch -d feature-apple,  删除失败, 分支没有被合并, 如果删除就会丢失掉修改, 要删除需要使用强行删除 -D。

13.推送到远程 git push origin branch-name , 将该分支推送到远程库对应的远程分支上。一般master 和dev分支需要时刻与远程同步, bug分支只用于本地修复bug,没必要推送到远程, feature 分支是否推送到远程取决于你是否在上面开发。

14.多人协作: git checkout -b dev origin/dev , 创建远程origin 的dev 分支到本地,创建本地分支dev。 彼此向origin/dev提交修改,一位小伙伴操作  git add file,  git commit -m "add new file" , git push origin dev ,   你也做同样的操作,git push 会失败,  因为你的小伙伴的最新提交和你要推送的提交有冲突, 解决办法:  git pull 把最新的提交从 origin/dev 抓下来, 然后在本地合并,解决冲突再次提交推送, 直接git pull 会失败, 因为你的本地dev分支和远程origin/dev 分支没有链接起来, 需要设置dev 和 origin/dev的链接, git branch --set-upstream-to=origin/dev dev ,  再次 git pull, merge会报错,手动解决冲突,  再次提交push, git commit  -m "fix  conflict" , git push origin dev。每次push之前必须git status 多次确认每次提交的是哪些改动, 不能将不必要的file提交上去。

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

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

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

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

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

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

15.有时候在本地提交多次, 在git log中会出现多次分叉, 再push到远程就会觉得整体不好看, 那么有一种办法解决这个, git rebase, 执行后原本提交的一大堆操作会变成一条直线, rebase 操作前后最终提交的内容是一致的,但是本地提交的commit 内容发生了变化,最后再次push。

rebase操作会把本地未push的分叉提交历史整理成一条直线,看上去更直观,因为分叉的提交需要三方对比,但缺点是本地的分叉提交已经被修改过了。

16.git tag <tagname> 用于新建一个标签, 默认为HEAD, 也可以指定一个commit id。

git tag -a <tagname> -m "blala" commit-id 可以指定标签信息。

git tag 可以查看所有的标签。

标签总是和某个commit挂钩的, 如果这个commit即出现在master分支又出现在dev分支,那么这两个分支都可以看到这个标签。

标签打错了也可以删除, git tag -d V0.1 , 创建的标签都存储在版本地。

如果要推送某个标签到远程,使用命令 git push origin <tagname>.

一次性推送全部尚未推送到远程的本地标签: git push origin  --tags

如果标签推送到远程了需要删除,则需要先在本地删除 git tag -d v1.0 , 然后从远程删除 git push origin :refs/tags/v1.0 , 可以从github上查看有没有删除。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值