Github使用

1. 普通玩法

git remote add origin https://github.com/username/repo-name.git
git pull  
写代码 
git pull 
git add *  或者git add -A(可以add .gitignore)
git commit -m “/////” 
git merge 
确认没有冲突 
git push origin master 

1.1 普通玩法 java eclipse增强版

新建一个project
cd到project的src文件夹下,
git init
git remote add origin https://github.com/username/xxxx.git
git pull origin master
进入eclipse F5刷新project

如果run .java出现editor does not contain a main type错误,eclipse中右键src文件夹,src 路径右键 -> Build Path -> Use as Source Folder,错误fix

source: https://blog.csdn.net/github_35160620/article/details/52157912

2. 怎么删除github里的文件夹

  • 如果此文件夹已被加入git追踪,那么删除方法很简单,只需要将此文件夹删掉,然后提交一下就可以了

  • 如果次文件夹曾经被加入过git追踪,现在被加入.gitignore里了,但是github上还有此文件夹。
    对于这种情况,稍微有点复杂,因为已经加入.gitignore的文件或文件夹,无法对其进行提交了,哪怕是将其删除,都无法提交。
    我们用以下方法可以很好的解决这个问题:

git rm -r --cached some-directory 
git commit -m 'Remove the now ignored directory "some-directory"' 
git push origin master 

3. 怎么删除sensitive data

不留痕迹的删除(删掉提交sensitive data的对应commit)

3.1 从你的资料库中清除文件

以Windows下为例(Linux类似), 打开项目的Git Bash,使用命令:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all

其中, path-to-your-remove-file 就是你要删除的文件的相对路径(相对于git仓库的跟目录), 替换成你要删除的文件即可.

如果你要删除的文件很多, 可以写进一个.sh文件批量执行, 如果文件或路径里有中文, 由于MinGW或CygWin对中文路径设置比较麻烦, 你可以使用通配符号, 例如: sound/music_.mp3, 这样就把sound目录下以music_开头的mp3文件都删除了.

如果你看到类似下面这样的, 就说明删除成功了:

//Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266)
//# Ref 'refs/heads/master' was rewritten
如果显示 xxxxx unchanged, 说明repo里没有找到该文件, 请检查路径和文件名是否正确.

注意: 补充一点, 如果你想以后也不会再上传这个文件或文件夹, 请把这个文件或文件夹添加到.gitignore文件里, 然后再push你的repo.

3.2 推送我们修改后的repo

以强制覆盖的方式推送你的repo, 命令如下:

git push origin master --force

这个过程其实是重新上传我们的repo, 比较耗时, 虽然跟删掉重新建一个repo有些类似, 但是好处是保留了原有的更新记录, 所以还是有些不同的. 如果你实在不在意这些更新记录, 也可以删掉重建, 两者也差不太多, 也许后者还更直观些.

执行结果类似下面:

Counting objects: 4669, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4352/4352), done.
Writing objects: 100% (4666/4666), 35.16 MiB | 51 KiB/s, done.
Total 4666 (delta 1361), reused 0 (delta 0)
To https://github.com/defunkt/github-gem.git
 + beb839d...81f21f3 master -> master (forced update)

3.3 清理和回收空间

虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间.
命令如下:

rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

参考资料:
https://rtyley.github.io/bfg-repo-cleaner/
http://blog.csdn.net/u013749540/article/details/70160537

4. 版本回退

4.1本地(未提交)版本回退

git reflog 或者是git log //了解一下需要回退的版本号
git reset --hard Obfafd //回退

0bfafd就是你要回退的版本的commit id的前面几位

4.2 自己的远程分支版本回退的方法

首先要回退本地分支:

git reflog
git reset --hard Obfafd

紧接着强制推送到远程分支:

git push -f

注意:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支

4.3公共远程分支版本回退的方法

git revert HEAD                     //撤销最近一次提交
git revert HEAD~1                   //撤销上上次的提交,注意:数字从0开始
git revert 0ffaacc                  //撤销0ffaacc这次提交

git revert 命令意思是撤销某次提交。它会产生一个新的提交,虽然代码回退了,但是版本依然是向前的,所以,当你用revert回退之后,所有人pull之后,他们的代码也自动的回退了。
但是,要注意以下几点:

  1. revert 是撤销一次提交,所以后面的commit id是你需要回滚到的版本的前一次提交
  2. 使用revert HEAD是撤销最近的一次提交,如果你最近一次提交是用revert命令产生的,那么你再执行一次,就相当于撤销了上次的撤销操作,换句话说,你连续执行两次revert HEAD命令,就跟没执行是一样的
  3. 使用revert HEAD~1 表示撤销最近2次提交,这个数字是从0开始的,如果你之前撤销过产生了commi id,那么也会计算在内的。
  4. 如果使用 revert 撤销的不是最近一次提交,那么一定会有代码冲突,需要你合并代码,合并代码只需要把当前的代码全部去掉,保留之前版本的代码就可以了.
  • git revert 命令的好处就是不会丢掉别人的提交,即使你撤销后覆盖了别人的提交,他更新代码后,可以在本地用 reset 向前回滚,找到自己的代码,然后拉一下分支,再回来合并上去就可以找回被你覆盖的提交了。

4.3.1 revert 合并代码,解决冲突

使用revert命令,如果不是撤销的最近一次提交,那么一定会有冲突,如下所示:

<<<<<<< HEAD
全部清空
第一次提交
=======
全部清空
>>>>>>> parent of c24cde7... 全部清空

解决冲突很简单,因为我们只想回到某次提交,因此需要把当前最新的代码去掉即可,也就是HEAD标记的代码:

<<<<<<< HEAD
全部清空
第一次提交
=======

5. fork别人的项目

5.1本地修改,再push看效果

fork别人的项目是在网页上点fork,自己的github上就会同步一份一样的仓库代码,想要修改就直接clone自己github上的fork的版本到本机之后,修改之后上传

clone 仓库地址
修改代码
git push origin master

如果要push到被fork的原仓库,就要原仓库的主人同意你的pull request才能push 成功

5.2 fork后如何同步源仓库的新更新内容

5.2.1 给fork配置远程库

//查看远程状态
git remote -v 
//添加一个将被同步给 fork 远程的上游仓库
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
//再次查看状态确认是否配置成功
git remote -v
# origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
# origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
# upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
# upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

5.2.2 同步fork

  • 从上游仓库 fetch 分支和提交点,传送到本地,并会被存储在一个本地分支 upstream/master
git fetch upstream
  • 切换到本地主分支(如果不在的话)
git checkout master
  • 把 upstream/master 分支合并到本地 master 上,这样就完成了同步,并且不会丢掉本地修改的内容。
git merge upstream/master
  • 如果想更新到 GitHub 的 fork 上,直接
git push origin master

6. 分支操作

常规操作:切换分支

git checkout <branch>

6.1 Git 如何 clone 非 master 分支的代码

我们每次使用命令git clone git@gitlab.xxx.com:xxxxx.git 默认 clone 的是这个仓库的 master 分支。如果最新的代码不在 master 分支上,该如何拿到呢?最新的代码可能在daily/1.4.1分支上,我们希望拿到这个分支上的代码。

  • 直接查看所有分支:
git branch -a #查看所有分支
//会得到
origin/HEAD -> origin/master
origin/daily/1.2.2
origin/daily/1.3.0
origin/daily/1.4.1
origin/develop
origin/feature/daily-1.0.0
origin/master
  • 然后直接
git checkout origin/daily/1.4.1

就切换好了

6.2. git创建新分支并push到远程分支

git checkout -b gh-pages 
git add *
git commit -m "first post"
//git remote add origin https://github.com/username/jekyll_demo.git
git push origin gh-pages

创建远程分支(本地分支push到远程):

$ git push origin [name]

git checkout -b iss53 一行等于下面两行

$ git branch iss53
$ git checkout iss53

6.3 删除分支

git branch -d <branchname>

7. stash - 保存和恢复工作进度

  • git stash

    保存当前的工作进度。会分别对暂存区和工作区的状态进行保存

  • git stash save "message..."

    这条命令实际上是第一条 git stash 命令的完整版

  • git stash list

    显示进度列表。此命令显然暗示了git stash 可以多次保存工作进度,并用在恢复时候进行选择

  • git stash pop [--index] [<stash>]

    如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除。

    如果提供<stash>参数(来自 git stash list 显示的列表),则从该 <stash> 中恢复。恢复完毕也将从进度列表中删除 <stash>

    选项--index 除了恢复工作区的文件外,还尝试恢复暂存区。

  • git stash apply [--index] [<stash>]

    除了不删除恢复的进度之外,其余和 git stash pop 命令一样

  • git stash clear

    删除所有存储的进度

7. 团队协作模式下,出现conflicts

7.1

7.1.1当多成员修改不同文件

直接git pull

7.1.2 当多成员修改文件名和文件内容

  • 常规操作:
那么一般先 
git pull
再修改代码 
git add
git commit
git push -u origin <branchname>
  • irregular operation: 手动合并
    git pull 之后提示,自动merge失败



    git status 一下可以知道当前branch已经和origin/master 分叉了



    那么怎么办:
  • 方法1:
    git mergetool


  • 方法2:
    用vs code 打开当前文件夹,用其中的版本管理工具来解决conflicts 问题,要注意其中有冗余代码的情况,然后再 git add, git commit , git push -u origin <branchname>
  • 方法3:
git checkout featurebranch
git rebase master

它会把整个 feature 分支移动到 master 分支的后面,有效地把所有 master 分支上新的提交并入过来。但是,rebase 为原分支上每一个提交创建一个新的提交,重写了项目历史,并且不会带来合并提交。

source:
https://blog.csdn.net/u012150179/article/details/14047183
http://www.cnblogs.com/sinojelly/archive/2011/08/07/2130172.html
https://www.jianshu.com/p/cca69cb695a6

  1. how to commit to remote branch without merge commit
git pull origin master (but no merge commit)

1. git pull --rebase

2. mannually merge commits

3. git rebase --continue

source:
http://kernowsoul.com/blog/2012/06/20/4-ways-to-avoid-merge-commits-in-git/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352