Git

Git

Local

Install Git

# install
sudo apt-get install git

# important config
# --global means it's working for current user (~/.gitconfig)
# without --global means for current repository (.git/config)
git config --global user.name "myname"
git config --global user.email "myemail"
# other config
git conifg --global color.ui true
git config --global alias alias_name raw_name

Basic Skills

# make directory
mkdir dir
cd dir

# initialize git repository
git init

# add files which ready to commit
git add file1
git add file2
# even the file3 is in .gitignore
git add -f file3
...

# delete files
rm file1
git rm file1
# introduce later, recovery file1
# git checkout -- file1

# commit changes
git commit -m "msg"

# branches
# create branch
git branch bra1
# switch to new branch ${bra1}
git checkout bra1
# create and switch
git checkout -b bra1
# merge branches
# merge specified branch with current branch
git merge bra1
git merge --no-ff -m "msg" bra1
# delete branch
git branch -d bra1
git branch -D feature-name

# stash
git stash
# recovery
git stash apply
git stash apply stash@{num}
# drop
git stash drop
# recovery and drop
git stash pop

# generate .gitignore and put the files or directories which you don't want track to it.

Check

# difference
git diff file1
git diff HEAD -- readme.txt

# add and commit status
git status

# log
# first commit to current commit
git log
git log --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit
git log -1

# all commit
git reflog

# check status of current branches
git branch
git branch -a
git branch -vv

# check stash
git stash list

# check remote repository
git remote
git remote -v

# check .gitignore
# find the rule why file3 has been ignored
git check-ignore -v file3

Time Travel

# commitid fineness
git reset --hard HEAD^
git reset --hard HEAD^^
git reset --hard HEAD~100
git reset --hard commitid

# variant fineness
# file will change: discard changes after git add
# file will change: discard changes after git commit
git checkout -- file1

# variant fineness
# file don't change: discard git add
git reset HEAD file1

Remote

Link

# use ssh to communicate
# generate id_rsa and id_rsa.pub in ~/.ssh/
ssh-keygen -t rsa -C "myeami"

# add id_rsa.pub to SSH KEYS of remote servers
# remote server: GitHub, gitoschina etc.

Basic Skills

# fetch remote repository information
git fetch
# merge local branch with remote branch
git merge
git merge origin/remote_branch_name
git merge @{upstream}
git merge @{u}

# fetch and merge
git pull

# create remote branch the first time
# push local branch to the remote branch
git push origin remote_branch_name
# push specified local tag to the remote server
git push origin local_tag_name
# push all local tag (which havn't been pushed) to the remote server
git push origin --tags

# make tag (the name of commitid)
git tag tag_name
git tag tag_name commitid
git tag -a tag_name -m "msg" commitid
# use -s (instead of -a) to generate PGP signature, gpg has been needed.
git tag -s tag_name -m "msg" commitid
# delete local tag
git tag -d v0.1
# delete remote tag
# delete local tag first
git push origin :refs/tags/tag_name

Check

# show all tag names
git tag

# show one specific tag information
git show tag_name

Sync

# both local and remote repository already exists

# create new repository on remote server

# associate local repository with remote repository
# Git remote repository name: origin (default name)
git remote add origin remote.git.address

# push current branch (default master) to remote branch
# -u : used at the first time to associate local master branch with remote master branch.
git push -u origin master
git push origin master
git push origin remote_branch_name

Clone

# local repository doesn't exists

# clone repository from remote server
# create local directory itself
# can only see master branch
git clone remote.git.address

# get other branch
# create new remote branch
git push origin remote_branch_name
# create local branch and link it to remote branch
git branch local_branch_name
git branch -u origin/remote_branch_name
git branch --set-upstream local_branch_name origin/remote_branch_name
# remote branch already exists
git checkout -b other_branch origin/other_branch

Usage

  • master: only do release
  • dev: everyone commit to dev, dev commit to master.
  • feature-name: new feature, experiment.
  • bug:
  • everyone:

GitHub

  • Fork other people's project
  • clone from self-repository on GitHub
  • pull request on self-repository of GitHub, waiting for raw project manager to accept.

Git server

  • install: sudo apt-get install git

  • add user: sudo adduser git

  • certificate: collect id_rsa.pub and put them into file /home/git/.ssh/authorized_keys

  • init git repository: do sudo git init --bare repository_name.git under /dirname/. (No working directory in it, because it's just for share, no one should login this server and change it.)

  • change owner: sudo chown -R git:git repository_name.git

  • forbiden shell: change /etc/passwd, change git:x:1001:1001:,,,:/home/git:bin/bash into git:x:1001:1001:,,,:/home/git:/user/bin/git-shell.
    (then we can use git by ssh, but we can't use shell.)

  • clone: git clone git@server:/dirname/repository_name.git

  • push etc.

  • Gitosis to manage id_rsa.pub

  • Gitolite to manage privilege

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

推荐阅读更多精彩内容