Git个人使用经验

1、操作实例

1.1、代码冲突提交:

推送新代码发现代码冲突,master不会允许本次推送继续进行,此时需要一系列新操作。
首先撤销上次 commit 操作,git reset --soft HEAD^
保存现有的开发代码,git stash
将最新的代码拉下来与本地代码合并,git pull
git stash pop释放之前的修改代码,对于有冲突可以通过 vim 打开代码进行手工merge
git add、git commit 之后进行代码的远程推送

1.2、上传部分文件

修改或添加了多个文件,但只想提交部分代码。此时需要遵循以下操作:

git add config/esqueryconfig.php //将对应的想要提交的文件提交到暂存区
git stash -u -k //忽略其他,关键一步
git status //可以看到只有一个文件需要commit
git commit -m ‘注释语句’ //提交暂存区
git push //推到远端仓库
git stash pop // 命令恢复之前缓存的工作

1.3 git checkout分支管理
掘金:使用git进行分支管理

推送本地分支到远程分支仓库:
$ git checkout -b feature-branch //创建并切换到分支feature-branch
$ git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)

1.4 本地已经存在的项目与github发生关联

切换到本地项目地址

git init 初始化项目。该步骤会创建一个 .git文件夹是附属于该仓库的工作树。
git add .
git commit -m ‘initial commit’
git remote add origin https://github.com/pod4g/sku.git 把本地项目和github远程仓库发生关联
有时可能需要将原有的origin重新命名:git remote rename origin new-name

git push -u origin master 把本地项目push到远程github仓库

本地仓库与远程仓库解除关联 rm -rf .git 删除该仓库的工作树即可。

  • 使用git在本地新建一个分支后,需要做远程分支关联。如果没有关联,git会在下面的操作中提示你显示的添加关联。
    关联目的是在执行git pull, git push操作时就不需要指定对应的远程分支,你只要没有显示指定,git pull的时候,就会提示你。
    There is no tracking information for the current branch.
    Please specify which branch you want to merge with.
    解决方法就是按照提示添加:git branch --set-upstream-to=origin/remote_branch your_branch
    其中,origin/remote_branch是你本地分支对应的远程分支;your_branch是你当前的本地分支。

  • 如果你是git pull或者git push报fatal: refusing to merge unrelated histories
    可以尝试: git pull origin master --allow-unrelated-histories

1.5 跨分支转移修改工作内容

比如我在A分支做了一些修改,现在由于某种原因(如A分支已经合并到master)不能把A分支上修改的东西保留下来但是需要把A分支上修改的东西继续在新分支继续修改。那么现在我们可以有两种简单的做法完成这一需求。

第一种方法:
我们不需要在A分支做commit,只需要在A分支新建B分支,然后切换过去。这个时候你会发现修改的东西在A,B分支都有。这个时候在B分支commit,那么这些修改保留在B分支上,再切换到A分支上会发现修改都没有保留下来。

第二种方法:
使用git stash 将A分支暂存起来,然后在某一个分支(如master分支)新建一个分支B,然后在B分支上使用git stash pop 将修改弹出到B分支上,然后这些修改就在B分支上了。然后我们又可以愉快的玩耍了~

2、git 语法
2.1、 git log

git log主要是用于github代码的版本管理,可以进行不同历史版本代码的回滚。

回滚commit记录:

方法1: git reset --hard HEAD ^ ( ^ 表示回到上一个版本,如果需要回退到上上个版本的话,将HEAD^改成HEAD^^, 以此类推。那如果要回退到前100个版本,这种方法肯定不方便,我们可以使用简便命令操作:git reset --hard HEAD~100 );

方法2:git reset --hard 版本号,可以通过如下命令获取到版本号:git log

reset后跟参数含义:

reset 为 重置到这次提交,将内容重置到指定的版本。git reset 命令后面是需要加2种参数的:–hard 和 --soft。这条命令默认情况下是 --soft。默认参数 -soft,所有commit的修改都会退回到git缓冲区;参数–hard,所有commit的修改直接丢弃

$ git reset --hard HEAD^        回退到上个版本
$ git reset --hard commit_id    退到/进到 指定commit_id

推送到远程

$ git push origin HEAD --force

版本穿梭
当你回滚之后,又后悔了,想恢复到新的版本怎么办?可以用git reflog打印你记录你的每一次操作记录

$ git reflog

输出:

c7edbfe HEAD@{0}: reset: moving to c7edbfefab1bdbef6cb60d2a7bb97aa80f022687
470e9c2 HEAD@{1}: reset: moving to 470e9c2
b45959e HEAD@{2}: revert: Revert "add img"
470e9c2 HEAD@{3}: reset: moving to 470e9c2
2c26183 HEAD@{4}: reset: moving to 2c26183
0f67bb7 HEAD@{5}: revert: Revert "add img"

找到你操作的id如:b45959e,就可以回退到这个版本

$ git reset --hard b45959e

可见版本回退一文中廖雪峰的总结:

  • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

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

  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

退出git log

执行 git log后想退出:按键q即可如常退出,约等于Esc的神奇功效

2.2、 git stash

用到git stash的情境是当时自己download代码下来之后进行了一段时间的开发,后面希望拉一下最新版的代码并和我开发后的代码进行融合,所以在巧姐指导下使用git stash。大致就是git stash命令先把当前进度保存起来,然后git pull拉下来最新代码,使用git stash pop来恢复之前的进度;对于两部分代码起冲突的部分则需要人工来处理。

git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后再运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message…'可以添加一些注释

git stash list
显示保存进度的列表。也就意味着git stash命令可以多次执行,每次运行都会生成相应的git ID。

git stash pop [–index] [stash_id]
git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。
git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的
通过git stash pop命令恢复进度后,会删除当前进度。
git stash apply [–index] [stash_id]
除了不删除恢复的进度之外,其余和git stash pop 命令一样。

git stash drop [stash_id]
删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。

git stash clear
删除所有存储的进度。

2.3、 git remove

项目进行中有时有部分文件或者文件夹,属于实验性的中间文件,但是push或者commit到git 远程仓库了,这个时候临时写gitignore已经不赶趟了,此时可以借助git remove命令解决这个问题。

git add 操作时,有时会误添加一些不想提交的文件,如何解决?
1、误add单个文件
git reset HEAD 将file退回到unstage区

2、误add多个文件,只撤销部分文件
git reset HEAD 将file退回到unstage区

git rm 与 git reset的区别
git rm:用于从工作区和索引中删除文件
git reset:用于将当前HEAD复位到指定状态。一般用于撤消之前的一些操作(如:git add,git commit等)。

git rm file_path删除暂存区和分支上的文件,同时工作区也不需要
git rm --cached file_path 删除暂存区或分支上的文件, 但工作区需要使用, 只是不希望被版本控制(适用于已经被git add,但是又想撤销的情况)
git reset HEAD 回退暂存区里的文件

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值